<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-13T02:57:18.243191" rpa="false" schemaversion="5">
<suite id="s1" name="daexim-clustering-basic.txt">
<suite id="s1-s1" name="010-Special-Export" source="/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/suites/daexim/010-special-export.robot">
<kw name="ClusterManagement_Setup" owner="ClusterManagement" type="SETUP">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.893763" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-13T02:57:18.890075" elapsed="0.003733"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-13T02:57:18.894054" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:18.893928" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:18.893899" elapsed="0.000233"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.894670" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:57:18.894289" elapsed="0.000434"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.895252" 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-04-13T02:57:18.894894" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:18.895908" elapsed="0.000302"/>
</kw>
<msg time="2026-04-13T02:57:18.896332" level="INFO">${status} = PASS</msg>
<msg time="2026-04-13T02:57:18.896390" 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 error.</doc>
<status status="PASS" start="2026-04-13T02:57:18.895468" elapsed="0.000949"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.897001" 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-04-13T02:57:18.896589" elapsed="0.000440"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.898098" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:57:18.897820" elapsed="0.000307"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.898545" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:57:18.898274" elapsed="0.000300"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.899094" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-13T02:57:18.898738" elapsed="0.000384"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:57:18.902313" elapsed="0.000238"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.903128" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:18.902713" elapsed="0.000482"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:18.903337" elapsed="0.000310"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.904440" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:18.904136" elapsed="0.000331"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:18.904514" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T02:57:18.904710" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-13T02:57:18.903836" elapsed="0.000900"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:18.905393" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.156:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7fe7722cc950&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-13T02:57:18.904946" elapsed="0.000610"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:57:18.905769" elapsed="0.000203"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-13T02:57:18.901653" elapsed="0.004382"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-13T02:57:18.901436" elapsed="0.004645"/>
</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-04-13T02:57:18.906925" elapsed="0.000193"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.907603" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:18.907264" elapsed="0.000382"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:18.907814" elapsed="0.000258"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.909036" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:18.908694" elapsed="0.000369"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:18.909110" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:57:18.909269" 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-04-13T02:57:18.908381" elapsed="0.000914"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:18.909952" level="INFO">Creating Session using : alias=ClusterManagement__session_2, url=http://10.30.170.138:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7fe7724665d0&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-13T02:57:18.909435" elapsed="0.000643"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:57:18.910231" elapsed="0.000194"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-13T02:57:18.906352" elapsed="0.004319"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-13T02:57:18.906175" elapsed="0.004542"/>
</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-04-13T02:57:18.911550" elapsed="0.000217"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.912413" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:18.911913" elapsed="0.000529"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:18.912710" elapsed="0.000227"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.913926" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:18.913432" elapsed="0.000527"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:18.914009" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:57:18.914175" 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-04-13T02:57:18.913129" elapsed="0.001086"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:18.915019" level="INFO">Creating Session using : alias=ClusterManagement__session_3, url=http://10.30.171.185:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7fe77227d290&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-13T02:57:18.914412" elapsed="0.000765"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:57:18.915385" elapsed="0.000294"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-13T02:57:18.911000" elapsed="0.004766"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-13T02:57:18.910807" elapsed="0.005020"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-04-13T02:57:18.899183" elapsed="0.016687"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.916581" level="INFO">${ClusterManagement__member_index_list} = [1, 2, 3]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:57:18.916078" elapsed="0.000583"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.917424" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.156', 2: '10.30.170.138', 3: '10.30.171.185'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:57:18.916913" elapsed="0.000571"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.918238" 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 a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:57:18.917750" elapsed="0.000548"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-13T02:57:18.897279" elapsed="0.021102"/>
</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-04-13T02:57:18.889210" elapsed="0.029259"/>
</kw>
<test id="s1-s1-t1" name="Create and Cancel Export" line="13">
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.928797" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:18.928404" elapsed="0.000421"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:18.928874" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:57:18.929032" 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-04-13T02:57:18.928074" elapsed="0.000984"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.941996" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:18.941726" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.942429" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:18.942186" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.942870" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:18.942608" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.943317" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:18.943063" elapsed="0.000303"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:18.944180" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:18.943973" elapsed="0.000233"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:18.944517" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:18.944345" elapsed="0.000197"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:18.944691" elapsed="0.000189"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:18.945267" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:18.945020" elapsed="0.000290"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:18.945353" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:57:18.945511" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:18.943561" elapsed="0.001976"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:19.986285" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:57:19.987914" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Sun, 12-Apr-2026 02:57:19 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Content-Type': 'application/yang-data+json', 'Content-Length': '222'} 
 body={"data-export-import:output":{"status":"initial","nodes":[{"node-name":"10.30.170.138:2550","status":"initial"},{"node-name":"10.30.171.185:2550","status":"initial"},{"node-name":"10.30.170.156:2550","status":"initial"}]}} 
 </msg>
<msg time="2026-04-13T02:57:19.988212" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:18.947652" elapsed="1.040625"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:18.945644" elapsed="1.042755"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:19.988902" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:19.988476" elapsed="0.000584"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:18.945593" elapsed="1.043522"/>
</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-04-13T02:57:19.995225" level="INFO">{"data-export-import:output":{"status":"initial","nodes":[{"node-name":"10.30.170.138:2550","status":"initial"},{"node-name":"10.30.171.185:2550","status":"initial"},{"node-name":"10.30.170.156:2550","status":"initial"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:19.991535" elapsed="0.004356"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:19.991197" elapsed="0.004754"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:19.991152" elapsed="0.004837"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:19.999542" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:19.996394" elapsed="0.003198"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:19.996081" elapsed="0.003561"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:19.996055" elapsed="0.003616"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.003765" 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-04-13T02:57:20.000247" elapsed="0.003547"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:20.004108" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:20.003875" elapsed="0.000361"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.004750" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:20.004419" elapsed="0.000358"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:20.004265" elapsed="0.000549"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:20.003853" elapsed="0.000983"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.005367" 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-04-13T02:57:20.004980" elapsed="0.000414"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:20.005716" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:20.005468" elapsed="0.000307"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.006275" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:20.005947" elapsed="0.000356"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:20.005802" elapsed="0.000537"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:20.005448" elapsed="0.000913"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.006503" elapsed="0.000378"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:20.007478" 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-04-13T02:57:20.007032" elapsed="0.000473"/>
</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-04-13T02:57:20.007661" elapsed="0.002322"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:19.989995" elapsed="0.020059"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:20.010272" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:20.010131" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:20.010112" elapsed="0.000233"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:20.013138" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "node-name": "10.30.170.138:2550",
    "status": "initial"
   },
   {
    "node-name": "10.30.170.156:2550",
    "status": "initial"
   },
   {
...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:20.010503" elapsed="0.002665"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:20.013222" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T02:57:20.013400" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "node-name": "10.30.170.138:2550",
    "status": "initial"
   },
   {
    "node-name": "10.30.170.156:2550",
    "status": "initial"
   },
   {
...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:18.938958" elapsed="1.074470"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:20.013496" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:57:20.013669" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "node-name": "10.30.170.138:2550",
    "status": "initial"
   },
   {
    "node-name": "10.30.170.156:2550",
    "status": "initial"
   },
   {
...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:18.936423" elapsed="1.077274"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:20.013750" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:57:20.013909" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "node-name": "10.30.170.138:2550",
    "status": "initial"
   },
   {
    "node-name": "10.30.170.156:2550",
    "status": "initial"
   },
   {
...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:18.925697" elapsed="1.088239"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.014386" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "node-name": "10.30.170.138:2550",
    "status": "initial"
   },
   {
    "node-name": "10.30.170.156:2550",
    "status": "initial"
   },
   {
    "node-name": "10.30.171.185:2550",
    "status": "initial"
   }
  ],
  "status": "initial"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:20.014085" elapsed="0.000350"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.014907" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "node-name": "10.30.170.138:2550",
    "status": "initial"
   },
   {
    "node-name": "10.30.170.156:2550",
    "status": "initial"
   },
   {
...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:57:20.014575" elapsed="0.000394"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:20.015785" elapsed="0.000418"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${config_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:20.017063" elapsed="0.000420"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${models_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:20.017639" elapsed="0.000406"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${operational_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:20.018202" elapsed="0.000501"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.019065" level="INFO">Did not Find all Json Files</msg>
<arg>Did not Find all Json Files</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:20.018854" elapsed="0.000256"/>
</kw>
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="PASS" start="2026-04-13T02:57:20.016596" elapsed="0.002567"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:20.016283" elapsed="0.002910"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="NOT RUN" start="2026-04-13T02:57:20.019390" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:20.019219" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:20.016263" elapsed="0.003216"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:20.015212" elapsed="0.004325"/>
</kw>
<arg>${EXPORT_INITIAL_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:18.919500" elapsed="1.100093"/>
</kw>
<kw name="Schedule Export" owner="DaeximKeywords">
<if>
<branch type="IF" condition="${include}">
<kw name="Set Variable" owner="BuiltIn">
<var>${file}</var>
<arg>${EXPORT_INCLUDE_FILE}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:20.024359" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:20.024187" elapsed="0.000231"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.025002" level="INFO">${file} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json</msg>
<var>${file}</var>
<arg>${exclude}</arg>
<arg>${EXPORT_EXCLUDE_FILE}</arg>
<arg>${EXPORT_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:57:20.024613" elapsed="0.000424"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:20.024443" elapsed="0.000639"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:20.024167" elapsed="0.000937"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:57:20.025396" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:20.025586" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "${time}",
    "data-export-import:local-node-only": "${flag}"
   }
 }
</msg>
<var>${json}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:57:20.025240" elapsed="0.000372"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.026151" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "500",
    "data-export-import:local-node-only": "false"
   }
 }
</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-13T02:57:20.025774" elapsed="0.000405"/>
</kw>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.027063" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:20.026731" elapsed="0.000358"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.039183" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:20.038881" elapsed="0.000332"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:20.039263" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:57:20.039418" 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-04-13T02:57:20.038526" elapsed="0.000916"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.042165" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:20.041917" elapsed="0.000323"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:20.044785" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:57:20.044201" elapsed="0.001810">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:57:20.042318" elapsed="0.003784">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:20.046318" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:20.046138" elapsed="0.000290"/>
</branch>
<status status="FAIL" start="2026-04-13T02:57:20.042298" elapsed="0.004159">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:57:20.046844" elapsed="0.000027"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:20.046920" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:57:20.039718" elapsed="0.007321">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:20.047100" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-13T02:57:20.038067" elapsed="0.009133">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:20.047370" elapsed="0.000022"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:20.047443" elapsed="0.000014"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:57:20.035845" elapsed="0.011696">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:20.027235" elapsed="0.020370"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:20.049121" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:20.048825" elapsed="0.000323"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:20.049960" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:20.049773" 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 with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:20.052742" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:20.052454" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:20.052434" elapsed="0.000390"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:20.053115" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:20.052962" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.054013" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:20.053393" elapsed="0.000667"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:20.054837" level="INFO">${conn_id} = 1</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:20.054204" elapsed="0.000660"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.056367" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:20.056512" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:20.055541" elapsed="0.001011"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.056795" elapsed="0.000640"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:20.059826" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:20.417746" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:20.059100" elapsed="0.358987"/>
</kw>
<msg time="2026-04-13T02:57:20.418190" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.057721" elapsed="0.360572"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:20.055078" elapsed="0.363465"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:20.419097" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:57:20.442156" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:57:20.442467" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:57:20.442575" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:57:20.418795" elapsed="0.023869"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:20.443016" elapsed="0.000939"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.445212" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:20.444395" elapsed="0.000938"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:20.445867" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:20.445517" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:20.445462" elapsed="0.000572"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:20.446393" elapsed="0.000099"/>
</return>
<status status="PASS" start="2026-04-13T02:57:20.446154" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:20.446120" elapsed="0.000541"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:20.446744" elapsed="0.000034"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.468215" elapsed="0.000852"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:20.469269" elapsed="0.000202"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:20.469648" elapsed="0.000131"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:20.448272" elapsed="0.021582"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:20.051921" elapsed="0.418035"/>
</kw>
<msg time="2026-04-13T02:57:20.470015" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.051276" elapsed="0.418801"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:20.050763" elapsed="0.419398"/>
</kw>
<msg time="2026-04-13T02:57:20.470204" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.050261" elapsed="0.419990"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.473216" 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-04-13T02:57:20.474014" elapsed="0.000157"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:20.474308" elapsed="0.000100"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:20.470586" elapsed="0.003899"/>
</kw>
<msg time="2026-04-13T02:57:20.474589" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:20.049358" elapsed="0.425257"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.475106" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:20.474820" elapsed="0.000344"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:20.475225" elapsed="0.000044"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:20.048413" elapsed="0.426981"/>
</kw>
<msg time="2026-04-13T02:57:20.475509" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:20.047775" elapsed="0.427768"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:20.477580" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:20.477212" elapsed="0.000397"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:20.478516" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:20.481832" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.482984" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:20.482271" elapsed="0.000774"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:20.483728" 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-04-13T02:57:20.483192" elapsed="0.000563"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.485161" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:20.485306" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:20.484433" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.485568" elapsed="0.000733"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:20.488459" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:20.816936" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:20 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:20.487938" elapsed="0.329286"/>
</kw>
<msg time="2026-04-13T02:57:20.817332" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.486717" elapsed="0.330716"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:20.483957" elapsed="0.333724"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:20.818291" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:57:20.831066" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:57:20.831388" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:57:20.831487" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:57:20.817962" elapsed="0.013576"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:20.831982" elapsed="0.000541"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.833716" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:20.832931" elapsed="0.000889"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:20.834283" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:20.833992" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:20.833941" elapsed="0.000604"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:20.834992" elapsed="0.000066"/>
</return>
<status status="PASS" start="2026-04-13T02:57:20.834746" elapsed="0.000386"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:20.834706" elapsed="0.000547"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:20.835323" elapsed="0.000023"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.852243" elapsed="0.000736"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:20.853187" elapsed="0.000191"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:20.853536" elapsed="0.000394"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:20.835826" elapsed="0.018162"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:20.480781" elapsed="0.373305"/>
</kw>
<msg time="2026-04-13T02:57:20.854146" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.480106" elapsed="0.374103"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:20.479557" elapsed="0.374738"/>
</kw>
<msg time="2026-04-13T02:57:20.854337" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.478840" elapsed="0.375547"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.857069" elapsed="0.000319"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:20.857538" elapsed="0.000463"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:20.858138" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:20.854721" elapsed="0.003573"/>
</kw>
<msg time="2026-04-13T02:57:20.858392" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:20.477840" elapsed="0.380578"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.858899" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:20.858596" elapsed="0.000345"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:20.858989" elapsed="0.000032"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:20.476459" elapsed="0.382660"/>
</kw>
<msg time="2026-04-13T02:57:20.859208" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:20.475863" elapsed="0.383370"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:20.860178" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:20.859902" elapsed="0.000302"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:20.860957" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:20.864376" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.865226" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:20.864814" elapsed="0.000461"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:20.865821" 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-04-13T02:57:20.865421" elapsed="0.000427"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:20.866837" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:20.866916" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:20.866430" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.867084" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:20.868802" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:21.223733" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:20 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:20.868001" elapsed="0.355917"/>
</kw>
<msg time="2026-04-13T02:57:21.224140" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.867657" elapsed="0.356571"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:20.866051" elapsed="0.358286"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:21.225081" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:57:21.237784" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:21.238049" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:57:21.238153" 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-04-13T02:57:21.224561" elapsed="0.013645"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:21.238550" elapsed="0.000542"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.240134" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.239470" elapsed="0.000758"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:21.240727" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:21.240403" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.240353" elapsed="0.000534"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:21.241249" elapsed="0.000087"/>
</return>
<status status="PASS" start="2026-04-13T02:57:21.241009" elapsed="0.000459"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.240974" elapsed="0.000575"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:21.241695" elapsed="0.000039"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:21.247946" 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-04-13T02:57:21.248731" elapsed="0.000232"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:21.249153" 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-04-13T02:57:21.242387" elapsed="0.006987"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:20.863243" elapsed="0.386262"/>
</kw>
<msg time="2026-04-13T02:57:21.249676" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.862424" elapsed="0.387329"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:20.861907" elapsed="0.387958"/>
</kw>
<msg time="2026-04-13T02:57:21.249929" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:20.861231" elapsed="0.388760"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:21.253033" 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-04-13T02:57:21.253496" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:21.253794" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:21.250385" elapsed="0.003556"/>
</kw>
<msg time="2026-04-13T02:57:21.254033" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:20.860404" elapsed="0.393654"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.254462" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 15 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:57 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.254215" elapsed="0.000296"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:21.254554" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:57:21.254721" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:20.859456" elapsed="0.395292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.255144" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 15 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:57 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.254901" elapsed="0.000292"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:21.255325" elapsed="0.000379"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:57:20.026403" elapsed="1.229362"/>
</kw>
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.261083" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:21.260783" elapsed="0.000327"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:21.261156" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:57:21.261304" 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-04-13T02:57:21.260292" elapsed="0.001038"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.274432" level="INFO">/rests/operations/data-export-import:schedule-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.274151" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.274903" level="INFO"> {
   "input": {
    "data-export-import:run-at": "500",
    "data-export-import:local-node-only": "false"
   }
 }
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.274641" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.275332" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.275083" elapsed="0.000383"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.275933" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.275668" elapsed="0.000309"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:21.276787" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:21.276560" elapsed="0.000253"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:21.277156" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:21.276968" elapsed="0.000213"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:21.277317" elapsed="0.000205"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.277929" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.277679" elapsed="0.000293"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:21.278025" elapsed="0.000044"/>
</return>
<msg time="2026-04-13T02:57:21.278201" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:21.276168" elapsed="0.002058"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:21.345814" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 path_url=/rests/operations/data-export-import:schedule-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '115', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body= {
   "input": {
    "data-export-import:run-at": "500",
    "data-export-import:local-node-only": "false"
   }
 }
 
 </msg>
<msg time="2026-04-13T02:57:21.346272" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '45'} 
 body={"data-export-import:output":{"result":true}} 
 </msg>
<msg time="2026-04-13T02:57:21.346568" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:21.280587" elapsed="0.066071"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.278309" elapsed="0.068472"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.347284" elapsed="0.000059"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.346849" elapsed="0.000602"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.278289" elapsed="0.069212"/>
</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-04-13T02:57:21.355299" level="INFO">{"data-export-import:output":{"result":true}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.349994" elapsed="0.005360"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.349423" elapsed="0.005969"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.349378" elapsed="0.006043"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.357907" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.355722" elapsed="0.002232"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.355484" elapsed="0.002505"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.355466" elapsed="0.002548"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.358607" 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-04-13T02:57:21.358185" elapsed="0.000465"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.358960" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.358725" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.359491" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:21.359190" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.359042" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.358706" elapsed="0.000866"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.360099" 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-04-13T02:57:21.359730" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.360409" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.360195" elapsed="0.000468"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.361139" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:21.360832" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.360688" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.360177" elapsed="0.001050"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:21.361450" elapsed="0.000381"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:21.362289" 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-04-13T02:57:21.361984" 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-04-13T02:57:21.362456" elapsed="0.002270"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:21.348345" elapsed="0.016452"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:21.364989" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:21.364877" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.364857" elapsed="0.000202"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:21.367765" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:21.365192" elapsed="0.002601"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:21.367845" elapsed="0.000038"/>
</return>
<msg time="2026-04-13T02:57:21.368049" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:21.271450" elapsed="0.096627"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:21.368146" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:57:21.368299" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:21.268828" elapsed="0.099496"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:21.368374" elapsed="0.000024"/>
</return>
<msg time="2026-04-13T02:57:21.368522" level="INFO">${response_json} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_json}</var>
<arg>${SCHEDULE_EXPORT_URL}</arg>
<arg>${json}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:21.259863" elapsed="0.108683"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.369000" level="INFO">{
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.368722" elapsed="0.000323"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Schedule Export job</doc>
<status status="PASS" start="2026-04-13T02:57:20.019894" elapsed="1.349208"/>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.376931" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:21.376597" elapsed="0.000361"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:21.377012" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:57:21.377169" 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-04-13T02:57:21.376254" elapsed="0.000941"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.390033" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.389765" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.390465" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.390225" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.390907" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.390660" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.391372" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.391130" elapsed="0.000285"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:21.392219" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:21.392019" elapsed="0.000225"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:21.392551" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:21.392381" elapsed="0.000195"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:21.392749" elapsed="0.000209"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.393414" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.393167" elapsed="0.000290"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:21.393501" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:57:21.393674" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:21.391599" elapsed="0.002101"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:21.404526" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:57:21.404945" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '373'} 
 body={"data-export-import:output":{"run-at":"2026-04-13T02:57:26Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:21Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:21Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:21Z","status":"scheduled"}]}} 
 </msg>
<msg time="2026-04-13T02:57:21.405049" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:21.395813" elapsed="0.009262"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.393777" elapsed="0.011344"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.405298" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.405147" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.393757" elapsed="0.011628"/>
</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-04-13T02:57:21.409862" level="INFO">{"data-export-import:output":{"run-at":"2026-04-13T02:57:26Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:21Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:21Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:21Z","status":"scheduled"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.406394" elapsed="0.003566"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.406185" elapsed="0.003841"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.406166" elapsed="0.003912"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.414023" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.410659" elapsed="0.003428"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.410196" elapsed="0.003941"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.410161" elapsed="0.004010"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.415030" 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-04-13T02:57:21.414384" elapsed="0.000685"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.415426" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.415169" elapsed="0.000326"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.415994" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:21.415692" elapsed="0.000332"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.415525" elapsed="0.000539"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.415144" elapsed="0.000942"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.416689" 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-04-13T02:57:21.416230" elapsed="0.000494"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.417100" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.416817" elapsed="0.000345"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.417676" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:21.417358" elapsed="0.000346"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.417185" elapsed="0.000555"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.416792" elapsed="0.000969"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:21.417900" elapsed="0.000398"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:21.418766" 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-04-13T02:57:21.418451" 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-04-13T02:57:21.419108" elapsed="0.002176"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:21.405749" elapsed="0.015601"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:21.421532" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:21.421423" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.421405" elapsed="0.000195"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:21.424884" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:21.421742" elapsed="0.003184"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:21.425007" elapsed="0.000059"/>
</return>
<msg time="2026-04-13T02:57:21.425254" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:21.387154" elapsed="0.038137"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:21.425384" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:57:21.425591" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:21.384555" elapsed="0.041094"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:21.425724" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:57:21.425936" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:21.373793" elapsed="0.052179"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.426565" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:26Z",
  "status": "scheduled"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.426205" elapsed="0.000449"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.427327" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:57:21.426851" elapsed="0.000515"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:21.428234" elapsed="0.000615"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${config_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:21.430057" elapsed="0.000490"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${models_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:21.430766" elapsed="0.000563"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${operational_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:21.431473" elapsed="0.000357"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.432205" level="INFO">Did not Find all Json Files</msg>
<arg>Did not Find all Json Files</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.431981" elapsed="0.000270"/>
</kw>
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="PASS" start="2026-04-13T02:57:21.429416" elapsed="0.002890"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.428953" elapsed="0.003384"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.432532" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.432361" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.428927" elapsed="0.003730"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:21.427711" elapsed="0.005000"/>
</kw>
<arg>${EXPORT_SCHEDULED_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:21.369327" elapsed="0.063438"/>
</kw>
<kw name="Cancel Export" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.440435" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:21.440132" elapsed="0.000330"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:21.440509" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:57:21.440675" 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-04-13T02:57:21.439700" elapsed="0.001001"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.454885" level="INFO">/rests/operations/data-export-import:cancel-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.454605" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.455398" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.455152" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.455845" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.455577" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.456266" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.456026" elapsed="0.000284"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:21.457100" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:21.456903" elapsed="0.000223"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:21.457435" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:21.457264" elapsed="0.000197"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:21.457594" elapsed="0.000209"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.458205" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.457942" elapsed="0.000307"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:21.458298" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:57:21.458459" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:21.456497" elapsed="0.001987"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:21.489052" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:cancel-export 
 path_url=/rests/operations/data-export-import:cancel-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:57:21.489231" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:cancel-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '45'} 
 body={"data-export-import:output":{"result":true}} 
 </msg>
<msg time="2026-04-13T02:57:21.489392" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:21.460590" elapsed="0.028836"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.458558" elapsed="0.030933"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.489749" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.489525" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.458539" elapsed="0.031351"/>
</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-04-13T02:57:21.493894" level="INFO">{"data-export-import:output":{"result":true}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.491175" elapsed="0.002777"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.490915" elapsed="0.003077"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.490893" elapsed="0.003133"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.497502" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.494299" elapsed="0.003271"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.494086" elapsed="0.003535"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.494069" elapsed="0.003612"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.498741" 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-04-13T02:57:21.497962" elapsed="0.000833"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.499342" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.498948" elapsed="0.000573"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.500379" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:21.499820" elapsed="0.000604"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.499566" elapsed="0.000913"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.498899" elapsed="0.001614"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.501328" 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-04-13T02:57:21.500774" elapsed="0.000592"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.501854" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.501466" elapsed="0.000480"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.502676" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:21.502192" elapsed="0.000523"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.501980" elapsed="0.000787"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.501441" elapsed="0.001354"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:21.502990" elapsed="0.000577"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:21.504088" 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-04-13T02:57:21.503785" elapsed="0.000329"/>
</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-04-13T02:57:21.504255" elapsed="0.002420"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:21.490349" elapsed="0.016397"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:21.506987" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:21.506833" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.506808" elapsed="0.000281"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:21.509828" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:21.507222" elapsed="0.002634"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:21.509916" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T02:57:21.510096" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:21.452048" elapsed="0.058075"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:21.510190" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:57:21.510339" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:21.449472" elapsed="0.060891"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:21.510415" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:57:21.510569" level="INFO">${response_json} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_json}</var>
<arg>${CANCEL_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:21.437433" elapsed="0.073164"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.511065" level="INFO">{
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.510772" elapsed="0.000341"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Cancel the export job</doc>
<status status="PASS" start="2026-04-13T02:57:21.432961" elapsed="0.078210"/>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.518702" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:21.518353" elapsed="0.000377"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:21.518778" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:57:21.518927" 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-04-13T02:57:21.517971" elapsed="0.000981"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.531937" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.531676" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.532432" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.532124" elapsed="0.000363"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.532929" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.532675" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.533345" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.533109" elapsed="0.000278"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:21.534174" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:21.533977" elapsed="0.000223"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:21.534505" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:21.534335" elapsed="0.000194"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:21.534683" elapsed="0.000196"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.535294" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.535045" elapsed="0.000294"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:21.535382" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:57:21.535541" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:21.533575" elapsed="0.001993"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:21.544823" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:57:21.545282" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '333'} 
 body={"data-export-import:output":{"status":"initial","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:21Z","status":"initial"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:21Z","status":"initial"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:21Z","status":"initial"}]}} 
 </msg>
<msg time="2026-04-13T02:57:21.545428" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:21.537685" elapsed="0.007780"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.535696" elapsed="0.009835"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.545803" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.545568" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.535667" elapsed="0.010261"/>
</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-04-13T02:57:21.551174" level="INFO">{"data-export-import:output":{"status":"initial","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:21Z","status":"initial"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:21Z","status":"initial"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:21Z","status":"initial"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.547451" elapsed="0.003799"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.547132" elapsed="0.004171"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.547104" elapsed="0.004238"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.555219" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.551766" elapsed="0.003517"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.551429" elapsed="0.003892"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.551404" elapsed="0.003943"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.555931" 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-04-13T02:57:21.555509" elapsed="0.000449"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.556246" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.556028" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.556810" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:21.556470" elapsed="0.000367"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.556326" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.556010" elapsed="0.000946"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.557512" 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-04-13T02:57:21.557105" elapsed="0.000434"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.557843" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.557609" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.558359" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:21.558065" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.557923" elapsed="0.000498"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.557591" elapsed="0.000851"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:21.558582" elapsed="0.000368"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:21.559435" 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-04-13T02:57:21.559131" elapsed="0.000330"/>
</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-04-13T02:57:21.559599" elapsed="0.002182"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:21.546443" elapsed="0.015406"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:21.562036" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:21.561926" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.561907" elapsed="0.000198"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:21.564836" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.170.138:2550",
    "status": "initial"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:21.562234" elapsed="0.002630"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:21.564915" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:57:21.565081" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.170.138:2550",
    "status": "initial"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:21.529098" elapsed="0.036010"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:21.565175" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:57:21.565330" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.170.138:2550",
    "status": "initial"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:21.526428" elapsed="0.038928"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:21.565408" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:57:21.565555" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.170.138:2550",
    "status": "initial"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:21.515834" elapsed="0.049747"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.566005" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.170.138:2550",
    "status": "initial"
   },
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.170.156:2550",
    "status": "initial"
   },
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.171.185:2550",
    "status": "initial"
   }
  ],
  "status": "initial"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.565749" elapsed="0.000304"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.566495" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:21Z",
    "node-name": "10.30.170.138:2550",
    "status": "initial"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:57:21.566189" elapsed="0.000334"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:21.567179" elapsed="0.000407"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${config_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:21.568483" elapsed="0.000368"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${models_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:21.568993" elapsed="0.000338"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${operational_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:21.569469" elapsed="0.000347"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.570169" level="INFO">Did not Find all Json Files</msg>
<arg>Did not Find all Json Files</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.569961" elapsed="0.000252"/>
</kw>
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="PASS" start="2026-04-13T02:57:21.568050" elapsed="0.002216"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.567733" elapsed="0.002563"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.570491" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.570321" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.567712" elapsed="0.002857"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:21.566771" elapsed="0.003844"/>
</kw>
<arg>${EXPORT_INITIAL_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:21.511384" elapsed="0.059302"/>
</kw>
<doc>schedule and cancel export of a cluster</doc>
<tag>cancel export</tag>
<status status="PASS" start="2026-04-13T02:57:18.918562" elapsed="2.652261"/>
</test>
<test id="s1-s1-t2" name="Schedule Absolute Time Export With UTC" line="22">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-13T02:57:21.571925" level="INFO">${time} = 2026-04-13T02:57:31Z</msg>
<var>${time}</var>
<arg>UTC</arg>
<arg>00:00:10</arg>
<arg>%Y-%m-%dT%H:%M:%SZ</arg>
<arg>${FALSE}</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-13T02:57:21.571574" elapsed="0.000378"/>
</kw>
<kw name="Schedule Export" owner="DaeximKeywords">
<if>
<branch type="IF" condition="${include}">
<kw name="Set Variable" owner="BuiltIn">
<var>${file}</var>
<arg>${EXPORT_INCLUDE_FILE}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.576747" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.576539" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.577395" level="INFO">${file} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json</msg>
<var>${file}</var>
<arg>${exclude}</arg>
<arg>${EXPORT_EXCLUDE_FILE}</arg>
<arg>${EXPORT_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:57:21.577001" elapsed="0.000423"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:21.576848" elapsed="0.000616"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:21.576513" elapsed="0.000973"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:57:21.577801" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:21.577974" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "${time}",
    "data-export-import:local-node-only": "${flag}"
   }
 }
</msg>
<var>${json}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:57:21.577640" elapsed="0.000360"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.578505" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "2026-04-13T02:57:31Z",
    "data-export-import:local-node-only": "false"
   }
 }
</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-13T02:57:21.578144" elapsed="0.000388"/>
</kw>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.579482" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:21.579135" elapsed="0.000374"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.591540" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:21.591210" elapsed="0.000358"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:21.591620" elapsed="0.000059"/>
</return>
<msg time="2026-04-13T02:57:21.591808" 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-04-13T02:57:21.590837" elapsed="0.000996"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.594776" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.594492" elapsed="0.000332"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:21.597473" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:57:21.596931" elapsed="0.001182">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:57:21.594902" elapsed="0.003305">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.598386" elapsed="0.000107"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:21.598244" elapsed="0.000293"/>
</branch>
<status status="FAIL" start="2026-04-13T02:57:21.594880" elapsed="0.003683">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:57:21.598959" elapsed="0.000026"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:21.599037" elapsed="0.000033"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:57:21.592109" elapsed="0.007071">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:21.599245" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-13T02:57:21.590433" elapsed="0.008971">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:21.599576" elapsed="0.000023"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:21.599667" elapsed="0.000016"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:57:21.588272" elapsed="0.011496">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:21.579819" elapsed="0.020013"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:21.601345" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:21.601055" elapsed="0.000318"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:21.602178" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:21.605438" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.606493" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:21.605884" elapsed="0.000660"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:21.607372" level="INFO">${conn_id} = 10</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:21.606709" elapsed="0.000697"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:21.608857" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:21.609006" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:21.608141" elapsed="0.000904"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:21.609270" elapsed="0.000675"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:21.612107" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:21.966798" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:21 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:21.611554" elapsed="0.355660"/>
</kw>
<msg time="2026-04-13T02:57:21.967362" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:21.610212" elapsed="0.357259"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:21.607619" elapsed="0.360119"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:21.968288" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:57:22.011544" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:57:22.011972" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:57:22.012075" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:57:21.967984" elapsed="0.044145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:22.012565" elapsed="0.000656"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.014457" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.013622" elapsed="0.000946"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:22.015119" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:22.014804" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.014746" elapsed="0.000578"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:22.015774" elapsed="0.000071"/>
</return>
<status status="PASS" start="2026-04-13T02:57:22.015455" elapsed="0.000472"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.015419" elapsed="0.000567"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:22.016067" elapsed="0.000035"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.032999" elapsed="0.000687"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:22.033885" elapsed="0.000180"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:22.034219" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:22.016847" elapsed="0.017530"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:21.604309" elapsed="0.430161"/>
</kw>
<msg time="2026-04-13T02:57:22.034528" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:21.603574" elapsed="0.431016"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:21.602977" elapsed="0.431710"/>
</kw>
<msg time="2026-04-13T02:57:22.034729" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:21.602468" elapsed="0.432307"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.037777" elapsed="0.000322"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:22.038248" elapsed="0.000154"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:22.038539" elapsed="0.000112"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:22.035078" elapsed="0.003627"/>
</kw>
<msg time="2026-04-13T02:57:22.038799" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:21.601577" elapsed="0.437247"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.039247" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.038998" elapsed="0.000377"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:22.039433" elapsed="0.000036"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:21.600416" elapsed="0.439160"/>
</kw>
<msg time="2026-04-13T02:57:22.039695" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:21.599978" elapsed="0.439744"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:22.041137" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:22.040860" elapsed="0.000304"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:22.041932" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:22.045811" elapsed="0.000267"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.046849" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.046214" elapsed="0.000683"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:22.047580" level="INFO">${conn_id} = 13</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:22.047038" elapsed="0.000568"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.049276" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:22.049476" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:22.048299" elapsed="0.001233"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.049863" elapsed="0.001086"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:22.053442" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:22.373512" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:21 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:22.052918" elapsed="0.320887"/>
</kw>
<msg time="2026-04-13T02:57:22.373904" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.051367" elapsed="0.322638"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:22.047837" elapsed="0.326394"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:22.374778" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:57:22.387003" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:57:22.387254" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:57:22.387355" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:57:22.374462" elapsed="0.012944"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:22.387828" elapsed="0.000478"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.389436" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.388701" elapsed="0.000837"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:22.390074" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:22.389757" elapsed="0.000551"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.389700" elapsed="0.000663"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:22.390787" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-04-13T02:57:22.390485" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.390451" elapsed="0.000523"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:22.391048" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.413171" elapsed="0.000666"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:22.414028" elapsed="0.000164"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:22.414346" elapsed="0.000109"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:22.391777" elapsed="0.022732"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:22.044479" elapsed="0.370123"/>
</kw>
<msg time="2026-04-13T02:57:22.414686" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.043206" elapsed="0.371533"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:22.042689" elapsed="0.372128"/>
</kw>
<msg time="2026-04-13T02:57:22.414857" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.042196" elapsed="0.372704"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.417796" 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-04-13T02:57:22.418260" elapsed="0.000150"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:22.418543" elapsed="0.000122"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:22.415179" elapsed="0.003540"/>
</kw>
<msg time="2026-04-13T02:57:22.418811" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:22.041366" elapsed="0.377470"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.419246" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.418998" elapsed="0.000289"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:22.419331" elapsed="0.000028"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:22.040376" elapsed="0.379078"/>
</kw>
<msg time="2026-04-13T02:57:22.419556" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:22.039955" elapsed="0.379628"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:22.420621" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:22.420351" elapsed="0.000312"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:22.421382" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:22.424269" elapsed="0.000254"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.425049" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.424672" elapsed="0.000422"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:22.425590" level="INFO">${conn_id} = 16</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:22.425231" elapsed="0.000385"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.426541" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:22.426618" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:22.426219" elapsed="0.000450"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.426812" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:22.428706" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:22.773526" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:22 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:22.427759" elapsed="0.346104"/>
</kw>
<msg time="2026-04-13T02:57:22.774032" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.427357" elapsed="0.346757"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:22.425832" elapsed="0.348390"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:22.774706" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:57:22.787757" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:22.787929" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:57:22.787993" 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-04-13T02:57:22.774446" elapsed="0.013580"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:22.788237" elapsed="0.000445"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.789766" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.789100" 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-04-13T02:57:22.790319" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:22.790033" elapsed="0.000396"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.789982" elapsed="0.000498"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:22.790865" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-04-13T02:57:22.790596" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.790562" elapsed="0.000490"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:22.791128" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.796685" elapsed="0.000368"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:22.797206" elapsed="0.000157"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:22.797497" elapsed="0.000097"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:22.791842" elapsed="0.005827"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:22.423208" elapsed="0.374556"/>
</kw>
<msg time="2026-04-13T02:57:22.797876" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.422662" elapsed="0.375267"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:22.422134" elapsed="0.375876"/>
</kw>
<msg time="2026-04-13T02:57:22.798055" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.421659" elapsed="0.376441"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.800805" 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-04-13T02:57:22.801268" elapsed="0.000143"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:22.801542" 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-04-13T02:57:22.798377" elapsed="0.003329"/>
</kw>
<msg time="2026-04-13T02:57:22.801796" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:22.420864" elapsed="0.380958"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.802237" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 15 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:57 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.801991" elapsed="0.000297"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:22.802330" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:57:22.802480" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:22.419970" elapsed="0.382537"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.802909" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 15 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:57 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.802668" elapsed="0.000292"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:22.803091" elapsed="0.000296"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:57:21.578760" elapsed="1.224686"/>
</kw>
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.809013" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:22.808544" elapsed="0.000495"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:22.809084" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:57:22.809230" 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-04-13T02:57:22.808173" elapsed="0.001081"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.821895" level="INFO">/rests/operations/data-export-import:schedule-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.821645" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.822318" level="INFO"> {
   "input": {
    "data-export-import:run-at": "2026-04-13T02:57:31Z",
    "data-export-import:local-node-only": "false"
   }
 }
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.822080" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.822761" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.822501" elapsed="0.000341"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.823221" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.822982" elapsed="0.000281"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:22.824064" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:22.823867" elapsed="0.000223"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:22.824394" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:22.824225" elapsed="0.000193"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:22.824551" elapsed="0.000218"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.825152" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.824908" elapsed="0.000287"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:22.825237" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:57:22.825391" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:22.823450" elapsed="0.001965"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:22.840724" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 path_url=/rests/operations/data-export-import:schedule-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '132', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body= {
   "input": {
    "data-export-import:run-at": "2026-04-13T02:57:31Z",
    "data-export-import:local-node-only": "false"
   }
 }
 
 </msg>
<msg time="2026-04-13T02:57:22.840988" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '45'} 
 body={"data-export-import:output":{"result":true}} 
 </msg>
<msg time="2026-04-13T02:57:22.841225" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:22.827433" elapsed="0.013849"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.825485" elapsed="0.015897"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:22.841780" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:22.841437" elapsed="0.000492"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.825468" elapsed="0.016508"/>
</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-04-13T02:57:22.849000" level="INFO">{"data-export-import:output":{"result":true}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.844234" elapsed="0.004813"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.843772" elapsed="0.005310"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.843706" elapsed="0.005401"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.851535" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.849370" elapsed="0.002211"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.849163" elapsed="0.002453"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.849146" elapsed="0.002509"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.852214" 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-04-13T02:57:22.851820" elapsed="0.000421"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:22.852527" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:22.852311" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.853067" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:22.852768" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.852607" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.852293" elapsed="0.000857"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.853665" 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-04-13T02:57:22.853289" elapsed="0.000403"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:22.853977" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:22.853763" elapsed="0.000269"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.854486" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:22.854194" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.854055" elapsed="0.000491"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.853745" elapsed="0.000853"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.854751" elapsed="0.000339"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:22.855527" 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-04-13T02:57:22.855239" elapsed="0.000314"/>
</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-04-13T02:57:22.855707" elapsed="0.002197"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:22.842750" elapsed="0.015216"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:22.858143" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:22.858039" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.858021" elapsed="0.000187"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:22.860735" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:22.858334" elapsed="0.002429"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:22.860812" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:57:22.860964" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:22.819031" elapsed="0.041958"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:22.861053" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:57:22.861199" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:22.816581" elapsed="0.044642"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:22.861272" elapsed="0.000024"/>
</return>
<msg time="2026-04-13T02:57:22.861417" level="INFO">${response_json} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_json}</var>
<arg>${SCHEDULE_EXPORT_URL}</arg>
<arg>${json}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:22.807732" elapsed="0.053709"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.861852" level="INFO">{
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.861585" elapsed="0.000311"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>${time}</arg>
<doc>Schedule Export job</doc>
<status status="PASS" start="2026-04-13T02:57:21.572224" elapsed="1.289727"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify Scheduled Export Timestamp" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.869567" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:22.869271" elapsed="0.000322"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:22.869654" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:57:22.869803" 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-04-13T02:57:22.868946" elapsed="0.000881"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.882527" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.882278" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.882973" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.882732" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.883390" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.883148" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.883849" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.883565" elapsed="0.000330"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:22.884713" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:22.884506" elapsed="0.000234"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:22.885051" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:22.884877" elapsed="0.000208"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:22.885269" elapsed="0.000196"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.886136" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.885607" elapsed="0.000576"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:22.886228" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:57:22.886384" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:22.884077" elapsed="0.002332"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:22.898111" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:57:22.898575" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '373'} 
 body={"data-export-import:output":{"run-at":"2026-04-13T02:57:31Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"}]}} 
 </msg>
<msg time="2026-04-13T02:57:22.898739" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:22.888500" elapsed="0.010275"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.886482" elapsed="0.012355"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:22.899065" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:22.898873" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.886463" elapsed="0.012724"/>
</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-04-13T02:57:22.903967" level="INFO">{"data-export-import:output":{"run-at":"2026-04-13T02:57:31Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.900587" elapsed="0.003448"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.900299" elapsed="0.003784"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.900271" elapsed="0.003846"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.907572" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.904485" elapsed="0.003174"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.904196" elapsed="0.003514"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.904173" elapsed="0.003571"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.908503" 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-04-13T02:57:22.907975" elapsed="0.000565"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:22.909012" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:22.908660" elapsed="0.000440"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.909774" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:22.909330" elapsed="0.000480"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.909133" elapsed="0.000725"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.908613" elapsed="0.001274"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.910588" 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-04-13T02:57:22.910083" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:22.911042" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:22.910742" elapsed="0.000377"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.911816" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:22.911345" elapsed="0.000510"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.911152" elapsed="0.000754"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.910717" elapsed="0.001218"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.912122" elapsed="0.000411"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:22.913006" 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-04-13T02:57:22.912695" 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-04-13T02:57:22.913169" elapsed="0.002163"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:22.899669" elapsed="0.015724"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:22.915569" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:22.915465" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.915446" elapsed="0.000202"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:22.918266" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:22.915790" elapsed="0.002504"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:22.918344" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:57:22.918498" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:22.879713" elapsed="0.038811"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:22.918589" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:57:22.918754" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:22.877272" elapsed="0.041507"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:22.918828" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:57:22.918973" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:22.866825" elapsed="0.052176"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.919401" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:31Z",
  "status": "scheduled"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.919147" elapsed="0.000311"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.919940" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:57:22.919593" elapsed="0.000373"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${response_json}</arg>
<arg>.*"run-at": "${time}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:22.920105" elapsed="0.000457"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>${time}</arg>
<doc>Verify export timestamp is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:22.862618" elapsed="0.058003"/>
</kw>
<arg>20 sec</arg>
<arg>5 sec</arg>
<arg>DaeximKeywords.Verify Scheduled Export Timestamp</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>${time}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-13T02:57:22.862100" elapsed="0.058587"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.928273" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:22.927977" elapsed="0.000323"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:22.928358" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:57:22.928560" 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-04-13T02:57:22.927604" elapsed="0.000989"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.941380" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.941132" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.941856" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.941599" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.942277" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.942033" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.942709" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.942454" elapsed="0.000297"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:22.943515" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:22.943329" elapsed="0.000212"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:22.943890" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:22.943693" elapsed="0.000223"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:22.944050" elapsed="0.000187"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.944622" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.944375" elapsed="0.000307"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:22.944726" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:57:22.944880" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:22.942934" elapsed="0.001970"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:22.956121" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:57:22.956237" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '373'} 
 body={"data-export-import:output":{"run-at":"2026-04-13T02:57:31Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"}]}} 
 </msg>
<msg time="2026-04-13T02:57:22.956338" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:22.946932" elapsed="0.009449"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.944974" elapsed="0.011509"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:22.956896" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:22.956539" elapsed="0.000505"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.944957" elapsed="0.012134"/>
</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-04-13T02:57:22.964651" level="INFO">{"data-export-import:output":{"run-at":"2026-04-13T02:57:31Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.959384" elapsed="0.005318"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.958926" elapsed="0.005810"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.958883" elapsed="0.005879"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.967192" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.965026" elapsed="0.002211"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.964818" elapsed="0.002453"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.964802" elapsed="0.002493"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.967859" 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-04-13T02:57:22.967444" elapsed="0.000445"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:22.968178" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:22.967961" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.968708" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:22.968395" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.968257" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.967942" elapsed="0.000848"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.969302" 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-04-13T02:57:22.968930" elapsed="0.000399"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:22.969667" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:22.969435" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.970180" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:22.969888" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:22.969749" elapsed="0.000492"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.969416" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:22.970400" elapsed="0.000357"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:22.971178" 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-04-13T02:57:22.970905" elapsed="0.000299"/>
</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-04-13T02:57:22.971340" elapsed="0.002192"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:22.957913" elapsed="0.015681"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:22.973788" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:22.973683" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:22.973664" elapsed="0.000188"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:22.976455" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:22.973980" elapsed="0.002503"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:22.976532" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:57:22.976705" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:22.938538" elapsed="0.038193"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:22.976795" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:57:22.976942" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:22.936114" elapsed="0.040854"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:22.977017" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:57:22.977161" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:22.925523" elapsed="0.051664"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.977609" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:31Z",
  "status": "scheduled"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:22.977351" elapsed="0.000321"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.978108" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:57:22.977809" elapsed="0.000326"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<msg time="2026-04-13T02:57:22.979167" level="FAIL">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:31Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</msg>
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="FAIL" start="2026-04-13T02:57:22.978706" elapsed="0.000590">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:31Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:57:22.979558" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:22.979383" elapsed="0.000232"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="NOT RUN" start="2026-04-13T02:57:22.979833" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:22.979653" elapsed="0.000236"/>
</branch>
<status status="NOT RUN" start="2026-04-13T02:57:22.979364" elapsed="0.000546"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="FAIL" start="2026-04-13T02:57:22.978351" elapsed="0.001671">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:31Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<arg>${EXPORT_COMPLETE_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="FAIL" start="2026-04-13T02:57:22.921337" elapsed="0.058801">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:31Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:27.994672" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:27.994251" elapsed="0.000456"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:27.994771" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T02:57:27.994943" 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-04-13T02:57:27.993895" elapsed="0.001073"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:28.007598" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:28.007327" elapsed="0.000342"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:28.008053" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:28.007810" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:28.008479" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:28.008231" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:28.008925" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:28.008683" elapsed="0.000285"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:28.009772" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:28.009554" elapsed="0.000244"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:28.010109" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:28.009937" elapsed="0.000197"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:28.010269" elapsed="0.000202"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:28.010951" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:28.010654" elapsed="0.000342"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:28.011041" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:57:28.011201" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:28.009156" elapsed="0.002070"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:28.025063" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:57:28.025212" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '373'} 
 body={"data-export-import:output":{"run-at":"2026-04-13T02:57:31Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"}]}} 
 </msg>
<msg time="2026-04-13T02:57:28.025385" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:28.013334" elapsed="0.012078"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:28.011304" elapsed="0.014155"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:28.025676" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:28.025486" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:28.011283" elapsed="0.014599"/>
</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-04-13T02:57:28.033924" level="INFO">{"data-export-import:output":{"run-at":"2026-04-13T02:57:31Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:22Z","status":"scheduled"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:28.028282" elapsed="0.005755"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:28.027792" elapsed="0.006322"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:28.027748" elapsed="0.006424"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:28.037535" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:28.034872" elapsed="0.002710"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:28.034300" elapsed="0.003316"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:28.034262" elapsed="0.003394"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:28.038223" 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-04-13T02:57:28.037820" elapsed="0.000431"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:28.038580" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:28.038321" elapsed="0.000343"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:28.039137" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:28.038836" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:28.038689" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:28.038303" elapsed="0.000916"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:28.039741" 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-04-13T02:57:28.039360" elapsed="0.000408"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:28.040052" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:28.039838" elapsed="0.000270"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:28.040562" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:28.040271" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:28.040131" elapsed="0.000491"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:28.039820" elapsed="0.000844"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:28.040805" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:28.041591" 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-04-13T02:57:28.041300" elapsed="0.000316"/>
</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-04-13T02:57:28.041777" elapsed="0.002389"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:28.026763" elapsed="0.017467"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:28.044412" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:28.044304" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:28.044285" elapsed="0.000195"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:28.047181" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:28.044613" elapsed="0.002597"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:28.047259" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:57:28.047423" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:28.004754" elapsed="0.042695"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:28.047571" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:57:28.047738" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:28.002254" elapsed="0.045510"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:28.047815" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:57:28.047963" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:27.991728" elapsed="0.056261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:28.048395" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:31Z",
  "status": "scheduled"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:28.048142" elapsed="0.000301"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:57:28.048898" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:57:28.048579" elapsed="0.000346"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<msg time="2026-04-13T02:57:28.049914" level="FAIL">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:31Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</msg>
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="FAIL" start="2026-04-13T02:57:28.049497" elapsed="0.000513">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:31Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:57:28.050270" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:28.050094" elapsed="0.000233"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="NOT RUN" start="2026-04-13T02:57:28.050510" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:28.050351" elapsed="0.000230"/>
</branch>
<status status="NOT RUN" start="2026-04-13T02:57:28.050075" elapsed="0.000527"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="FAIL" start="2026-04-13T02:57:28.049150" elapsed="0.001578">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:31Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<arg>${EXPORT_COMPLETE_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="FAIL" start="2026-04-13T02:57:27.980991" elapsed="0.069849">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:22Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:31Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.066804" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:33.066233" elapsed="0.000618"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:33.066938" elapsed="0.000057"/>
</return>
<msg time="2026-04-13T02:57:33.067173" 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-04-13T02:57:33.065619" elapsed="0.001688"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.083602" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.083135" elapsed="0.000562"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.084273" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.083874" elapsed="0.000467"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.084948" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.084547" elapsed="0.000472"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.085618" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.085253" elapsed="0.000449"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:33.087006" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:33.086709" elapsed="0.000336"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:33.087498" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:33.087249" elapsed="0.000290"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:33.087762" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.088668" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.088265" elapsed="0.000469"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:33.088802" elapsed="0.000056"/>
</return>
<msg time="2026-04-13T02:57:33.089047" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:33.086061" elapsed="0.003024"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:33.103359" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:57:33.104184" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '886'} 
 body={"data-export-import:output":{"status":"complete","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:31Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:31Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:31Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"}]}} 
 </msg>
<msg time="2026-04-13T02:57:33.104377" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:33.092325" elapsed="0.012095"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:33.089259" elapsed="0.015241"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:33.104828" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:33.104545" elapsed="0.000388"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:33.089226" elapsed="0.015741"/>
</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-04-13T02:57:33.111494" level="INFO">{"data-export-import:output":{"status":"complete","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:31Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:31Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:31Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.106845" elapsed="0.004742"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:33.106461" elapsed="0.005209"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:33.106430" elapsed="0.005285"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.115191" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.112217" elapsed="0.003029"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:33.111814" elapsed="0.003472"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:33.111785" elapsed="0.003529"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.115982" 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-04-13T02:57:33.115503" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:33.116400" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:33.116166" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.117003" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:33.116659" elapsed="0.000372"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:33.116485" elapsed="0.000582"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:33.116144" elapsed="0.000947"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.117705" 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-04-13T02:57:33.117235" elapsed="0.000498"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:33.118040" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:33.117809" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.118751" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:33.118300" elapsed="0.000487"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:33.118125" elapsed="0.000710"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:33.117789" elapsed="0.001078"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.119080" elapsed="0.000564"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:33.120298" 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-04-13T02:57:33.119865" elapsed="0.000474"/>
</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-04-13T02:57:33.120551" elapsed="0.003268"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:33.105713" elapsed="0.018213"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:33.124240" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:33.124058" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:33.124022" elapsed="0.000330"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:33.128560" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:33.124571" elapsed="0.004037"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:33.128711" elapsed="0.000053"/>
</return>
<msg time="2026-04-13T02:57:33.128974" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:33.079277" elapsed="0.049737"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:33.129118" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T02:57:33.129355" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:33.076121" elapsed="0.053276"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:33.129475" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T02:57:33.129734" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:33.060814" elapsed="0.068962"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.130485" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:57:31Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.170.138:2550",
    "status": "complete"
   },
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:57:31Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.170.156:2550",
    "status": "complete"
   },
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:57:31Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.171.185:2550",
    "status": "complete"
   }
  ],
  "status": "complete"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.130040" elapsed="0.000643"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.131352" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:57:33.130895" elapsed="0.000501"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:33.132359" elapsed="0.000498"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:57:33.133454" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:33.132980" elapsed="0.000564"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${config_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:33.134479" elapsed="0.000531"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${models_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:33.135222" elapsed="0.000500"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${operational_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:33.135935" elapsed="0.000453"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.136976" level="INFO">Found all Json Files</msg>
<arg>Found all Json Files</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.136596" elapsed="0.000447"/>
</kw>
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="PASS" start="2026-04-13T02:57:33.133875" elapsed="0.003247"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:33.133587" elapsed="0.003567"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:33.132946" elapsed="0.004231"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:33.131811" elapsed="0.005413"/>
</kw>
<arg>${EXPORT_COMPLETE_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:33.051732" elapsed="0.085547"/>
</kw>
<arg>20 sec</arg>
<arg>5 sec</arg>
<arg>DaeximKeywords.Verify Export Status</arg>
<arg>${EXPORT_COMPLETE_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-13T02:57:22.920840" elapsed="10.216492"/>
</kw>
<kw name="Verify Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.138400" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:33.138058" elapsed="0.000385"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:33.139680" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:33.139378" elapsed="0.000332"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:33.142039" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:33.144961" elapsed="0.000263"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.145756" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.145358" elapsed="0.000445"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:33.146316" level="INFO">${conn_id} = 19</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:33.145946" elapsed="0.000396"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.147208" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:33.147284" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:33.146931" elapsed="0.000431"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.147510" elapsed="0.000342"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:33.149042" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:33.477166" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:22 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:33.148350" elapsed="0.328968"/>
</kw>
<msg time="2026-04-13T02:57:33.477404" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.148007" elapsed="0.329478"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:33.146539" elapsed="0.331057"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:33.478120" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json'.</msg>
<msg time="2026-04-13T02:57:33.490889" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:33.491220" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<msg time="2026-04-13T02:57:33.491323" 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-04-13T02:57:33.477856" elapsed="0.013521"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:33.491817" elapsed="0.000520"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.493358" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.492731" 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-04-13T02:57:33.493952" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:33.493621" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:33.493570" elapsed="0.000577"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:33.494559" elapsed="0.000099"/>
</return>
<status status="PASS" start="2026-04-13T02:57:33.494298" elapsed="0.000463"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:33.494256" elapsed="0.000574"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:33.494910" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.500617" 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-04-13T02:57:33.501383" elapsed="0.000262"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:33.501847" elapsed="0.000147"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:33.495578" elapsed="0.006492"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:33.143890" elapsed="0.358314"/>
</kw>
<msg time="2026-04-13T02:57:33.502289" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.143338" elapsed="0.359033"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:33.142821" elapsed="0.359665"/>
</kw>
<msg time="2026-04-13T02:57:33.502546" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.142312" elapsed="0.360299"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.506814" 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-04-13T02:57:33.507565" elapsed="0.000246"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:33.508111" 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-04-13T02:57:33.503120" elapsed="0.005237"/>
</kw>
<msg time="2026-04-13T02:57:33.508501" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:33.139916" elapsed="0.368625"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.509197" level="INFO">-rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.508815" elapsed="0.000457"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:33.509347" elapsed="0.000046"/>
</return>
<msg time="2026-04-13T02:57:33.509583" level="INFO">${cfg} = -rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<var>${cfg}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_DATA_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:33.138937" elapsed="0.370685"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.510233" level="INFO">-rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<arg>${cfg}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.509862" elapsed="0.000457"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${cfg}</arg>
<arg>.*${EXP_DATA_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:33.510531" elapsed="0.000523"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:33.512001" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:33.511721" elapsed="0.000308"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:33.512803" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:33.515816" elapsed="0.000267"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.516839" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.516221" elapsed="0.000667"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:33.517421" level="INFO">${conn_id} = 22</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:33.517034" elapsed="0.000413"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.518363" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:33.518443" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:33.518064" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.518614" elapsed="0.000369"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:33.520141" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:33.845953" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:33 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:33.519510" elapsed="0.326707"/>
</kw>
<msg time="2026-04-13T02:57:33.846320" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.519142" elapsed="0.327281"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:33.517670" elapsed="0.328875"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:33.847061" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json'.</msg>
<msg time="2026-04-13T02:57:33.860306" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:33.860583" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<msg time="2026-04-13T02:57:33.860699" 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-04-13T02:57:33.846801" elapsed="0.013938"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:33.861086" elapsed="0.000456"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.862354" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.861838" elapsed="0.000597"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:33.862840" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:33.862568" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:33.862526" 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-04-13T02:57:33.863235" elapsed="0.000047"/>
</return>
<status status="PASS" start="2026-04-13T02:57:33.863048" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:33.863020" elapsed="0.000347"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:33.863416" elapsed="0.000026"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.867798" elapsed="0.000772"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:33.869053" elapsed="0.000398"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:33.869828" 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-04-13T02:57:33.863933" elapsed="0.006158"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:33.514745" elapsed="0.355656"/>
</kw>
<msg time="2026-04-13T02:57:33.870468" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.514131" elapsed="0.356409"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:33.513588" elapsed="0.357073"/>
</kw>
<msg time="2026-04-13T02:57:33.870713" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.513082" elapsed="0.357679"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.873795" elapsed="0.000367"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:33.874336" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:33.874676" elapsed="0.000105"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:33.871087" elapsed="0.003746"/>
</kw>
<msg time="2026-04-13T02:57:33.874927" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:33.512233" elapsed="0.362723"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.875372" level="INFO">-rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.875123" elapsed="0.000295"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:33.875460" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:57:33.875615" level="INFO">${mdl} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<var>${mdl}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${MODELS_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:33.511284" elapsed="0.364372"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.876121" level="INFO">-rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<arg>${mdl}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.875867" elapsed="0.000299"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${mdl}</arg>
<arg>.*${MODELS_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:33.876303" elapsed="0.000352"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:33.877568" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:33.877296" elapsed="0.000298"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:33.878338" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:33.878200" 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 with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:33.880984" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:33.880697" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:33.880675" elapsed="0.000390"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:33.881323" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:33.881196" elapsed="0.000254"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.881978" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:33.881585" elapsed="0.000439"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:33.882529" 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-04-13T02:57:33.882164" elapsed="0.000392"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:33.883432" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:33.883509" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:33.883148" elapsed="0.000384"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.883689" elapsed="0.000497"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:33.885285" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:34.213930" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:33 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:33.884713" elapsed="0.329375"/>
</kw>
<msg time="2026-04-13T02:57:34.214177" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.884343" elapsed="0.329919"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:33.882772" elapsed="0.331605"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:34.214883" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json'.</msg>
<msg time="2026-04-13T02:57:34.227496" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:34.227625" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<msg time="2026-04-13T02:57:34.227692" 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-04-13T02:57:34.214615" elapsed="0.013101"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:34.227983" elapsed="0.000470"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:34.229491" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:34.228848" elapsed="0.000739"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:34.230085" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:34.229787" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:34.229737" elapsed="0.000506"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:34.230592" elapsed="0.000089"/>
</return>
<status status="PASS" start="2026-04-13T02:57:34.230358" elapsed="0.000400"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:34.230325" elapsed="0.000488"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:34.230913" elapsed="0.000034"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:34.237004" elapsed="0.000767"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:34.238116" elapsed="0.000372"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:34.238826" elapsed="0.000278"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:34.231578" elapsed="0.007644"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:33.880156" elapsed="0.359272"/>
</kw>
<msg time="2026-04-13T02:57:34.239550" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.879603" elapsed="0.360136"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:33.879090" elapsed="0.360878"/>
</kw>
<msg time="2026-04-13T02:57:34.240039" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:33.878601" elapsed="0.361486"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:34.242724" elapsed="0.000341"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:34.243223" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:34.243502" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:34.240378" elapsed="0.003288"/>
</kw>
<msg time="2026-04-13T02:57:34.243761" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:33.877809" elapsed="0.365978"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:34.244209" level="INFO">-rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:34.243954" elapsed="0.000299"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:34.244297" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:57:34.244450" level="INFO">${opr} = -rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<var>${opr}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_OPER_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:33.876888" elapsed="0.367588"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:34.244886" level="INFO">-rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<arg>${opr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:34.244638" elapsed="0.000292"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${opr}</arg>
<arg>.*${EXP_OPER_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:34.245070" elapsed="0.000342"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify if the backedup files are present in the controller</doc>
<status status="PASS" start="2026-04-13T02:57:33.137700" elapsed="1.107775"/>
</kw>
<doc>Schedule export at a particular time</doc>
<tag>absolute time export</tag>
<status status="PASS" start="2026-04-13T02:57:21.571096" elapsed="12.674504"/>
</test>
<test id="s1-s1-t3" name="Schedule Absolute Time Export With Localtime" line="41">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-13T02:57:34.246704" level="INFO">${time} = 2026-04-13T02:57:44+000</msg>
<var>${time}</var>
<arg>local</arg>
<arg>00:00:10</arg>
<arg>%Y-%m-%dT%H:%M:%S+000</arg>
<arg>${FALSE}</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-13T02:57:34.246356" elapsed="0.000375"/>
</kw>
<kw name="Run Keyword And Expect Error" owner="BuiltIn">
<kw name="Schedule Export" owner="DaeximKeywords">
<if>
<branch type="IF" condition="${include}">
<kw name="Set Variable" owner="BuiltIn">
<var>${file}</var>
<arg>${EXPORT_INCLUDE_FILE}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:34.251819" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:34.251641" elapsed="0.000238"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:57:34.252380" level="INFO">${file} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json</msg>
<var>${file}</var>
<arg>${exclude}</arg>
<arg>${EXPORT_EXCLUDE_FILE}</arg>
<arg>${EXPORT_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:57:34.252041" elapsed="0.000367"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:34.251904" elapsed="0.000545"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:34.251606" elapsed="0.000865"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:57:34.252769" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:34.252932" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "${time}",
    "data-export-import:local-node-only": "${flag}"
   }
 }
</msg>
<var>${json}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:57:34.252603" elapsed="0.000355"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-13T02:57:34.253456" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "2026-04-13T02:57:44+000",
    "data-export-import:local-node-only": "false"
   }
 }
</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-13T02:57:34.253098" elapsed="0.000385"/>
</kw>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:57:34.254327" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:34.254014" elapsed="0.000339"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:34.266017" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:34.265689" elapsed="0.000357"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:34.266101" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:57:34.266262" 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-04-13T02:57:34.265334" elapsed="0.000952"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:34.269367" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:34.269111" elapsed="0.000302"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:34.272400" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:57:34.271447" elapsed="0.001571">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:57:34.269489" elapsed="0.003613">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:34.273273" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:34.273135" elapsed="0.000199"/>
</branch>
<status status="FAIL" start="2026-04-13T02:57:34.269468" elapsed="0.003890">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:57:34.273744" elapsed="0.000026"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:34.273818" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:57:34.266556" elapsed="0.007371">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:34.273986" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-13T02:57:34.264956" elapsed="0.009128">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:34.274247" elapsed="0.000022"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:34.274320" elapsed="0.000015"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:57:34.262685" elapsed="0.011732">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:34.254501" elapsed="0.019978"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:34.276054" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:34.275768" elapsed="0.000313"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:34.276865" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:34.280797" elapsed="0.000354"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:34.282704" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:34.281390" elapsed="0.001409"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:34.283880" level="INFO">${conn_id} = 28</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:34.283048" elapsed="0.000892"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:34.286218" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:34.286415" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:34.285776" elapsed="0.000681"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:34.287315" elapsed="0.000649"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:34.289790" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:34.611924" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:34 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:34.289311" elapsed="0.322803"/>
</kw>
<msg time="2026-04-13T02:57:34.612302" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:34.288764" elapsed="0.323676"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:34.284365" elapsed="0.328247"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:34.613935" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:57:34.647714" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:57:34.648214" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:57:34.648423" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:57:34.613258" elapsed="0.035293"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:34.649526" elapsed="0.000678"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:34.652255" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:34.650762" elapsed="0.001701"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:34.653454" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:34.652990" elapsed="0.000837"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:34.652870" elapsed="0.001097"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:34.654506" elapsed="0.000064"/>
</return>
<status status="PASS" start="2026-04-13T02:57:34.654101" elapsed="0.000707"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:34.654065" elapsed="0.000878"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:34.655039" elapsed="0.000045"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:34.660348" 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-04-13T02:57:34.662080" elapsed="0.000414"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:34.663186" elapsed="0.000359"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:34.655812" elapsed="0.007853"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:34.278866" elapsed="0.384959"/>
</kw>
<msg time="2026-04-13T02:57:34.663885" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:34.278137" elapsed="0.385809"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:34.277610" elapsed="0.386419"/>
</kw>
<msg time="2026-04-13T02:57:34.664072" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:34.277136" elapsed="0.386983"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:34.666912" elapsed="0.000340"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:34.667402" elapsed="0.000150"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:34.667699" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:34.664411" elapsed="0.003439"/>
</kw>
<msg time="2026-04-13T02:57:34.667948" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:34.276287" elapsed="0.391692"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:34.668443" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:34.668187" elapsed="0.000298"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:34.668533" elapsed="0.000032"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:34.275151" elapsed="0.393609"/>
</kw>
<msg time="2026-04-13T02:57:34.668889" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:34.274724" elapsed="0.394192"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:34.670368" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:34.670071" elapsed="0.000325"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:34.671167" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:34.675880" elapsed="0.000741"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:34.678557" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:34.676968" elapsed="0.001742"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:34.680058" 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-04-13T02:57:34.679020" elapsed="0.001114"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:34.683166" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:34.683367" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:34.682466" elapsed="0.000947"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:34.684314" elapsed="0.000813"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:34.686944" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:35.048437" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:34 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:34.686504" elapsed="0.362088"/>
</kw>
<msg time="2026-04-13T02:57:35.048760" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:34.685929" elapsed="0.362935"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:34.680684" elapsed="0.368309"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:35.049867" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:57:35.063754" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:57:35.064266" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:57:35.064480" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:57:35.049372" elapsed="0.015243"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:35.065666" elapsed="0.000849"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.068788" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.067216" elapsed="0.001788"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:35.069908" elapsed="0.000051"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:35.069416" elapsed="0.000753"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:35.069360" elapsed="0.000941"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:35.070877" elapsed="0.000064"/>
</return>
<status status="PASS" start="2026-04-13T02:57:35.070436" elapsed="0.000785"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:35.070400" elapsed="0.000956"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:35.071452" elapsed="0.000036"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.075478" 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-04-13T02:57:35.076830" elapsed="0.000424"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:35.077934" elapsed="0.000321"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:35.072133" elapsed="0.006224"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:34.673398" elapsed="0.405110"/>
</kw>
<msg time="2026-04-13T02:57:35.078642" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:34.672492" elapsed="0.406208"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:34.671975" elapsed="0.406805"/>
</kw>
<msg time="2026-04-13T02:57:35.078821" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:34.671436" elapsed="0.407429"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.081546" elapsed="0.000332"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:35.082025" elapsed="0.000144"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:35.082301" 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-04-13T02:57:35.079166" elapsed="0.003280"/>
</kw>
<msg time="2026-04-13T02:57:35.082537" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:34.670602" elapsed="0.411960"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.083024" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.082741" elapsed="0.000325"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:35.083109" elapsed="0.000029"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:34.669528" elapsed="0.413704"/>
</kw>
<msg time="2026-04-13T02:57:35.083318" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:34.669072" elapsed="0.414270"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:35.084234" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:35.083962" elapsed="0.000298"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:35.085128" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:35.088112" elapsed="0.000249"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.089367" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.088494" elapsed="0.000921"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:35.090082" level="INFO">${conn_id} = 34</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:35.089559" elapsed="0.000549"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.091550" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:35.091706" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:35.090807" elapsed="0.000937"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.091997" elapsed="0.000644"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:35.094965" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:35.422982" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:35 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:35.094431" elapsed="0.328830"/>
</kw>
<msg time="2026-04-13T02:57:35.423365" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.093029" elapsed="0.330434"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:35.090305" elapsed="0.333546"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:35.424429" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:57:35.437126" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:35.437472" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:57:35.437584" 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-04-13T02:57:35.424102" elapsed="0.013576"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:35.438067" elapsed="0.000534"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.439912" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.439030" elapsed="0.000983"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:35.440509" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:35.440200" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:35.440146" elapsed="0.000572"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:35.441099" elapsed="0.000066"/>
</return>
<status status="PASS" start="2026-04-13T02:57:35.440846" elapsed="0.000396"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:35.440811" elapsed="0.000489"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:35.441436" elapsed="0.000039"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.462482" elapsed="0.001025"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:35.463730" elapsed="0.000184"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:35.464077" elapsed="0.000107"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:35.442188" elapsed="0.022051"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:35.087069" elapsed="0.377274"/>
</kw>
<msg time="2026-04-13T02:57:35.464420" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.086419" elapsed="0.378066"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:35.085882" elapsed="0.378686"/>
</kw>
<msg time="2026-04-13T02:57:35.464614" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.085391" elapsed="0.379306"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.467713" 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-04-13T02:57:35.468191" elapsed="0.000150"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:35.468488" elapsed="0.000100"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:35.465000" elapsed="0.003656"/>
</kw>
<msg time="2026-04-13T02:57:35.468754" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:35.084458" elapsed="0.384392"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.469342" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 15 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:57 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.469044" elapsed="0.000357"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:35.469454" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:57:35.469617" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:35.083559" elapsed="0.386105"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.470067" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 15 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:57 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.469812" elapsed="0.000306"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:35.470253" elapsed="0.000312"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:57:34.253700" elapsed="1.216959"/>
</kw>
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.476204" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:35.475900" elapsed="0.000331"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:35.476279" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:57:35.476430" 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-04-13T02:57:35.475544" elapsed="0.000911"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.490021" level="INFO">/rests/operations/data-export-import:schedule-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.489744" elapsed="0.000330"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.490455" level="INFO"> {
   "input": {
    "data-export-import:run-at": "2026-04-13T02:57:44+000",
    "data-export-import:local-node-only": "false"
   }
 }
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.490216" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.490907" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.490651" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.491327" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.491087" elapsed="0.000283"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:35.492188" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:35.491984" elapsed="0.000230"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:35.492532" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:35.492360" elapsed="0.000197"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:35.492714" elapsed="0.000230"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.493361" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.493090" elapsed="0.000315"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:35.493449" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:57:35.493614" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:35.491564" elapsed="0.002094"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:35.517450" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 path_url=/rests/operations/data-export-import:schedule-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '135', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body= {
   "input": {
    "data-export-import:run-at": "2026-04-13T02:57:44+000",
    "data-export-import:local-node-only": "false"
   }
 }
 
 </msg>
<msg time="2026-04-13T02:57:35.517754" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 status=500, reason=Server Error 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '470', 'Connection': 'close'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 500 Request failed.&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 500 Request failed.&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/operations/data-export-import:schedule-export&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;500&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Request failed.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;org.glassfish.jersey.servlet.ServletContainer&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-04-13T02:57:35.518175" level="FAIL">HTTPError: 500 Server Error: Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:57:35.495995" elapsed="0.024353">HTTPError: 500 Server Error: Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</status>
</kw>
<status status="FAIL" start="2026-04-13T02:57:35.493822" elapsed="0.026781">HTTPError: 500 Server Error: Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:35.521324" elapsed="0.000075"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:35.520738" elapsed="0.000781"/>
</branch>
<status status="FAIL" start="2026-04-13T02:57:35.493799" elapsed="0.027782">HTTPError: 500 Server Error: Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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="NOT RUN" start="2026-04-13T02:57:35.522365" elapsed="0.000041"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:35.522579" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:35.522522" elapsed="0.000145"/>
</branch>
<status status="NOT RUN" start="2026-04-13T02:57:35.522494" elapsed="0.000205"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:35.522889" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:57:35.522984" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-04-13T02:57:35.487060" elapsed="0.036084">HTTPError: 500 Server Error: Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:35.523254" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="FAIL" start="2026-04-13T02:57:35.484454" elapsed="0.038938">HTTPError: 500 Server Error: Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:35.523479" elapsed="0.000022"/>
</return>
<var>${response_json}</var>
<arg>${SCHEDULE_EXPORT_URL}</arg>
<arg>${json}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="FAIL" start="2026-04-13T02:57:35.475089" elapsed="0.048525">HTTPError: 500 Server Error: Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:35.523866" elapsed="0.000030"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>${time}</arg>
<doc>Schedule Export job</doc>
<status status="FAIL" start="2026-04-13T02:57:34.247424" elapsed="1.276592">HTTPError: 500 Server Error: Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</status>
</kw>
<arg>*</arg>
<arg>Schedule Export</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>${time}</arg>
<doc>Runs the keyword and checks that the expected error occurred.</doc>
<status status="PASS" start="2026-04-13T02:57:34.246956" elapsed="1.277315"/>
</kw>
<doc>Schedule export at a particular time</doc>
<tag>absolute time export</tag>
<status status="PASS" start="2026-04-13T02:57:34.245848" elapsed="1.278634"/>
</test>
<test id="s1-s1-t4" name="Schedule Absolute Time Export In Past" line="47">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-13T02:57:35.526240" level="INFO">${time} = 2026-04-13T02:57:25Z</msg>
<var>${time}</var>
<arg>UTC</arg>
<arg>-00:00:10</arg>
<arg>%Y-%m-%dT%H:%M:%SZ</arg>
<arg>${FALSE}</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-13T02:57:35.525522" elapsed="0.000826"/>
</kw>
<kw name="Run Keyword And Expect Error" owner="BuiltIn">
<kw name="Schedule Export" owner="DaeximKeywords">
<if>
<branch type="IF" condition="${include}">
<kw name="Set Variable" owner="BuiltIn">
<var>${file}</var>
<arg>${EXPORT_INCLUDE_FILE}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:35.535688" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:35.535411" elapsed="0.000369"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.536504" level="INFO">${file} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json</msg>
<var>${file}</var>
<arg>${exclude}</arg>
<arg>${EXPORT_EXCLUDE_FILE}</arg>
<arg>${EXPORT_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:57:35.536007" elapsed="0.000536"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:35.535817" elapsed="0.000784"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:35.535375" elapsed="0.001275"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:57:35.537096" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:35.537355" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "${time}",
    "data-export-import:local-node-only": "${flag}"
   }
 }
</msg>
<var>${json}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:57:35.536837" elapsed="0.000555"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.538088" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "2026-04-13T02:57:25Z",
    "data-export-import:local-node-only": "false"
   }
 }
</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-13T02:57:35.537588" elapsed="0.000527"/>
</kw>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.539027" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:35.538685" elapsed="0.000371"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.550596" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:35.550270" elapsed="0.000368"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:35.550697" elapsed="0.000047"/>
</return>
<msg time="2026-04-13T02:57:35.550874" 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-04-13T02:57:35.549932" elapsed="0.000966"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.553639" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.553369" elapsed="0.000319"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:35.556309" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:57:35.555822" elapsed="0.001071">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:57:35.553765" elapsed="0.003222">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:35.557156" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:35.557019" elapsed="0.000198"/>
</branch>
<status status="FAIL" start="2026-04-13T02:57:35.553743" elapsed="0.003497">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:57:35.557600" elapsed="0.000040"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:35.557690" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:57:35.551166" elapsed="0.006632">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:35.557855" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-13T02:57:35.549541" elapsed="0.008408">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:35.558112" elapsed="0.000021"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:35.558182" elapsed="0.000014"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:57:35.547336" elapsed="0.010940">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:35.539215" elapsed="0.019187"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:35.559703" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:35.559414" elapsed="0.000315"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:35.560484" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:35.564371" elapsed="0.000386"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.566322" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.565028" elapsed="0.001411"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:35.567531" level="INFO">${conn_id} = 37</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:35.566717" elapsed="0.000876"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.570259" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:35.570456" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:35.569604" elapsed="0.000895"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.571287" elapsed="0.000562"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:35.573601" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:35.896036" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:35 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:35.573266" elapsed="0.322938"/>
</kw>
<msg time="2026-04-13T02:57:35.896362" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.572696" elapsed="0.323778"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:35.568098" elapsed="0.328512"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:35.897501" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:57:35.931374" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:57:35.932150" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:57:35.932380" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:57:35.897023" elapsed="0.035490"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:35.933492" elapsed="0.000716"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.936205" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.934764" elapsed="0.001660"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:35.937476" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:35.937020" elapsed="0.000766"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:35.936962" elapsed="0.000951"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:35.938431" elapsed="0.000066"/>
</return>
<status status="PASS" start="2026-04-13T02:57:35.938040" elapsed="0.000687"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:35.938006" elapsed="0.000851"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:35.938940" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.945381" elapsed="0.000819"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:35.946955" elapsed="0.000543"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:35.948294" elapsed="0.000416"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:35.939686" elapsed="0.009152"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:35.562458" elapsed="0.386559"/>
</kw>
<msg time="2026-04-13T02:57:35.949092" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.561813" elapsed="0.387355"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:35.561280" elapsed="0.387985"/>
</kw>
<msg time="2026-04-13T02:57:35.949311" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.560769" elapsed="0.388593"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.952875" 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-04-13T02:57:35.953438" elapsed="0.000161"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:35.953960" elapsed="0.000104"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:35.949753" elapsed="0.004371"/>
</kw>
<msg time="2026-04-13T02:57:35.954223" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:35.559929" elapsed="0.394321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.954721" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.954436" elapsed="0.000328"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:35.954813" elapsed="0.000038"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:35.559028" elapsed="0.395924"/>
</kw>
<msg time="2026-04-13T02:57:35.955042" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:35.558547" elapsed="0.396520"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:35.956409" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:35.956130" elapsed="0.000306"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:35.957507" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:35.961563" elapsed="0.000388"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.963525" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:35.962200" elapsed="0.001420"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:35.964750" level="INFO">${conn_id} = 40</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:35.963906" elapsed="0.000905"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:35.967156" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:35.967398" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:35.966689" elapsed="0.000766"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.968361" elapsed="0.000743"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:35.970832" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:36.291411" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:35 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:35.970475" elapsed="0.321097"/>
</kw>
<msg time="2026-04-13T02:57:36.291744" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.969931" elapsed="0.321922"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:35.965245" elapsed="0.326738"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:36.292847" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:57:36.306597" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:57:36.306983" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:57:36.307115" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:57:36.292353" elapsed="0.014846"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:36.307792" elapsed="0.000794"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.309834" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:36.308956" elapsed="0.001005"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:36.310583" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:36.310283" elapsed="0.000474"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:36.310246" elapsed="0.000594"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:36.311173" elapsed="0.000046"/>
</return>
<status status="PASS" start="2026-04-13T02:57:36.310924" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:36.310903" elapsed="0.000524"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:36.311481" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:36.316325" elapsed="0.000869"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:36.318239" elapsed="0.000624"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:36.319879" elapsed="0.000444"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:36.311954" elapsed="0.008513"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:35.959524" elapsed="0.361179"/>
</kw>
<msg time="2026-04-13T02:57:36.320865" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.958837" elapsed="0.362112"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:35.958305" elapsed="0.362761"/>
</kw>
<msg time="2026-04-13T02:57:36.321128" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:35.957823" elapsed="0.363369"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:36.324426" elapsed="0.000339"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:36.324918" elapsed="0.000150"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:36.325205" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:36.321588" elapsed="0.003768"/>
</kw>
<msg time="2026-04-13T02:57:36.325452" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:35.956675" elapsed="0.368802"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.325921" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:36.325663" elapsed="0.000319"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:36.326035" elapsed="0.000032"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:35.955723" elapsed="0.370445"/>
</kw>
<msg time="2026-04-13T02:57:36.326258" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:35.955223" elapsed="0.371060"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:36.327182" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:36.326906" elapsed="0.000303"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:36.328105" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:36.331111" elapsed="0.000263"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.332339" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:36.331510" elapsed="0.000878"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:36.333247" level="INFO">${conn_id} = 43</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:36.332531" elapsed="0.000744"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.334780" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:36.334922" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:36.334016" elapsed="0.000945"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:36.335223" elapsed="0.000651"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:36.338073" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:36.665270" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:36 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:36.337535" elapsed="0.328071"/>
</kw>
<msg time="2026-04-13T02:57:36.665750" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:36.336285" elapsed="0.329669"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:36.333484" elapsed="0.332824"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:36.666880" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:57:36.679776" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:36.680177" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:57:36.680325" 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-04-13T02:57:36.666538" elapsed="0.013863"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:36.680982" elapsed="0.000728"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.683065" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:36.682170" elapsed="0.000963"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:36.683465" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:36.683258" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:36.683221" elapsed="0.000351"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:36.683849" elapsed="0.000046"/>
</return>
<status status="PASS" start="2026-04-13T02:57:36.683687" elapsed="0.000258"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:36.683662" elapsed="0.000319"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:36.684032" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:36.706901" elapsed="0.000720"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:36.707945" elapsed="0.000193"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:36.708295" 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-04-13T02:57:36.684491" elapsed="0.023966"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:36.330062" elapsed="0.378493"/>
</kw>
<msg time="2026-04-13T02:57:36.708621" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:36.329393" elapsed="0.379337"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:36.328873" elapsed="0.379960"/>
</kw>
<msg time="2026-04-13T02:57:36.708889" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:36.328374" elapsed="0.380574"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:36.712270" 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-04-13T02:57:36.712859" elapsed="0.000304"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:36.713310" 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-04-13T02:57:36.709268" elapsed="0.004230"/>
</kw>
<msg time="2026-04-13T02:57:36.713620" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:36.327410" elapsed="0.386332"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.714224" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 15 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:57 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:36.713936" elapsed="0.000362"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:36.714355" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:57:36.714530" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:36.326506" elapsed="0.388070"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.715075" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 15 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:57 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:36.714817" elapsed="0.000312"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:36.715266" elapsed="0.000309"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:57:35.538324" elapsed="1.177573"/>
</kw>
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.721539" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:36.721187" elapsed="0.000384"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:36.721624" elapsed="0.000063"/>
</return>
<msg time="2026-04-13T02:57:36.721815" 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-04-13T02:57:36.720821" elapsed="0.001021"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.735571" level="INFO">/rests/operations/data-export-import:schedule-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:36.735264" elapsed="0.000381"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.736049" level="INFO"> {
   "input": {
    "data-export-import:run-at": "2026-04-13T02:57:25Z",
    "data-export-import:local-node-only": "false"
   }
 }
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:36.735797" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.736488" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:36.736235" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.737072" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:36.736821" elapsed="0.000297"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:36.737945" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:36.737736" elapsed="0.000237"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:36.738295" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:36.738117" elapsed="0.000204"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:36.738456" elapsed="0.000225"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.739078" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:36.738823" elapsed="0.000300"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:36.739171" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T02:57:36.739345" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:36.737319" elapsed="0.002052"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:36.757129" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 path_url=/rests/operations/data-export-import:schedule-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '132', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body= {
   "input": {
    "data-export-import:run-at": "2026-04-13T02:57:25Z",
    "data-export-import:local-node-only": "false"
   }
 }
 
 </msg>
<msg time="2026-04-13T02:57:36.757621" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 status=500, reason=Internal Server Error 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '195'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "operation-failed",
        "error-message": "Attempt to schedule export in past",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-04-13T02:57:36.757920" level="FAIL">HTTPError: 500 Server Error: Internal Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:57:36.742165" elapsed="0.016607">HTTPError: 500 Server Error: Internal Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</status>
</kw>
<status status="FAIL" start="2026-04-13T02:57:36.739528" elapsed="0.019432">HTTPError: 500 Server Error: Internal Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:36.759342" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:36.759033" elapsed="0.000456"/>
</branch>
<status status="FAIL" start="2026-04-13T02:57:36.739506" elapsed="0.020037">HTTPError: 500 Server Error: Internal Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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="NOT RUN" start="2026-04-13T02:57:36.760374" elapsed="0.000056"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:36.760755" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:36.760666" elapsed="0.000182"/>
</branch>
<status status="NOT RUN" start="2026-04-13T02:57:36.760596" elapsed="0.000300"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:36.761181" elapsed="0.000045"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:57:36.761326" elapsed="0.000033"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-04-13T02:57:36.732664" elapsed="0.028895">HTTPError: 500 Server Error: Internal Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:36.761756" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="FAIL" start="2026-04-13T02:57:36.730027" elapsed="0.031939">HTTPError: 500 Server Error: Internal Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:36.762097" elapsed="0.000032"/>
</return>
<var>${response_json}</var>
<arg>${SCHEDULE_EXPORT_URL}</arg>
<arg>${json}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="FAIL" start="2026-04-13T02:57:36.720261" elapsed="0.042037">HTTPError: 500 Server Error: Internal Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:36.762660" elapsed="0.000047"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>${time}</arg>
<doc>Schedule Export job</doc>
<status status="FAIL" start="2026-04-13T02:57:35.529847" elapsed="1.233044">HTTPError: 500 Server Error: Internal Server Error for url: http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export</status>
</kw>
<arg>*</arg>
<arg>Schedule Export</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>${time}</arg>
<doc>Runs the keyword and checks that the expected error occurred.</doc>
<status status="PASS" start="2026-04-13T02:57:35.526584" elapsed="1.236492"/>
</kw>
<doc>Schedule export at a particular time</doc>
<tag>absolute time export</tag>
<status status="PASS" start="2026-04-13T02:57:35.524818" elapsed="1.238523"/>
</test>
<test id="s1-s1-t5" name="Create Module Exclude Export" line="53">
<kw name="Schedule Exclude Export" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.766882" level="INFO">${controller_index} = 1</msg>
<var>${controller_index}</var>
<arg>${controller_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:36.766121" elapsed="0.000821"/>
</kw>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:36.768755" level="INFO">${ip_address} = 10.30.170.156</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:36.768070" elapsed="0.000743"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-13T02:57:36.769003" elapsed="0.000068"/>
</return>
<msg time="2026-04-13T02:57:36.769241" level="INFO">${host} = 10.30.170.156</msg>
<var>${host}</var>
<arg>${controller_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-13T02:57:36.767372" elapsed="0.001893"/>
</kw>
<kw name="Schedule Export" owner="DaeximKeywords">
<if>
<branch type="IF" condition="${include}">
<kw name="Set Variable" owner="BuiltIn">
<var>${file}</var>
<arg>${EXPORT_INCLUDE_FILE}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:36.770174" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:36.770005" elapsed="0.000226"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.770753" level="INFO">${file} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export_exclude.json</msg>
<var>${file}</var>
<arg>${exclude}</arg>
<arg>${EXPORT_EXCLUDE_FILE}</arg>
<arg>${EXPORT_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:57:36.770395" elapsed="0.000386"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:36.770255" elapsed="0.000566"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:36.769986" elapsed="0.000857"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:57:36.771119" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export_exclude.json"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export_exclude.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:36.771284" level="INFO">${json} =  {
     "input": {
         "data-export-import:run-at": ${time},
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "${module}",
                 "data-...</msg>
<var>${json}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:57:36.770973" elapsed="0.000338"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.771845" level="INFO">${json} =  {
     "input": {
         "data-export-import:run-at": 500,
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "network-topology",
                 "da...</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-13T02:57:36.771452" elapsed="0.000420"/>
</kw>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.772896" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:36.772374" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.784491" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:36.784177" elapsed="0.000341"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:36.784564" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:57:36.784728" 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-04-13T02:57:36.783851" elapsed="0.000902"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.787428" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:36.787180" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:36.789886" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:57:36.789465" elapsed="0.000953">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:57:36.787540" elapsed="0.002953">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:36.790677" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:36.790525" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-04-13T02:57:36.787522" elapsed="0.003241">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:57:36.791111" elapsed="0.000025"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:36.791183" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:57:36.785007" elapsed="0.006280">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:36.791344" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-13T02:57:36.783462" elapsed="0.007976">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:36.791602" elapsed="0.000022"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:36.791689" elapsed="0.000015"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:57:36.781266" elapsed="0.010571">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:36.773068" elapsed="0.018833"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:36.793150" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:36.792882" elapsed="0.000294"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:36.793942" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:36.798152" elapsed="0.000447"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.799637" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:36.798818" elapsed="0.000953"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:36.800769" 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-04-13T02:57:36.799977" elapsed="0.000833"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:36.802735" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:36.802926" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:36.802238" elapsed="0.000786"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:36.803804" elapsed="0.000626"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:36.806273" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:37.126778" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:36 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:36.805953" elapsed="0.320990"/>
</kw>
<msg time="2026-04-13T02:57:37.127086" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:36.805236" elapsed="0.321961"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:36.801103" elapsed="0.326269"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:37.128085" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:57:37.151316" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:57:37.151779" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:57:37.151980" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:57:37.127707" elapsed="0.024389"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:37.152896" elapsed="0.000549"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.155046" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.153978" elapsed="0.001398"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:37.156169" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:37.155730" elapsed="0.000688"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:37.155673" elapsed="0.000803"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:37.157023" elapsed="0.000065"/>
</return>
<status status="PASS" start="2026-04-13T02:57:37.156595" elapsed="0.001072"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:37.156561" elapsed="0.001176"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:37.157816" elapsed="0.000034"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.163528" elapsed="0.000944"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:37.165021" elapsed="0.000693"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:37.166077" elapsed="0.000507"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:37.158496" elapsed="0.008259"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:36.796081" elapsed="0.370841"/>
</kw>
<msg time="2026-04-13T02:57:37.167007" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:36.795405" elapsed="0.371690"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:36.794698" elapsed="0.372541"/>
</kw>
<msg time="2026-04-13T02:57:37.167299" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:36.794210" elapsed="0.373155"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.171917" 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-04-13T02:57:37.172623" elapsed="0.000355"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:37.173168" elapsed="0.000146"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:37.167820" elapsed="0.005571"/>
</kw>
<msg time="2026-04-13T02:57:37.173529" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:36.793376" elapsed="0.380192"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.174248" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.173856" elapsed="0.000455"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:37.174369" elapsed="0.000043"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:36.792479" elapsed="0.382066"/>
</kw>
<msg time="2026-04-13T02:57:37.174699" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:36.792046" elapsed="0.382692"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:37.176814" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:37.176272" elapsed="0.000585"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:37.178004" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:37.184049" elapsed="0.000514"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.186177" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.184898" elapsed="0.001472"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:37.187976" level="INFO">${conn_id} = 49</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:37.186760" elapsed="0.001277"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.191429" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:37.191752" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:37.190174" elapsed="0.001718"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.193360" elapsed="0.000963"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:37.197173" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:37.511332" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:37 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:37.196784" elapsed="0.314752"/>
</kw>
<msg time="2026-04-13T02:57:37.511716" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.195536" elapsed="0.316303"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:37.188506" elapsed="0.323506"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:37.512753" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:57:37.525457" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:57:37.525761" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:57:37.525870" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:57:37.512338" elapsed="0.013589"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:37.526378" elapsed="0.000438"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.527919" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.527171" elapsed="0.000942"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:37.528681" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:37.528348" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:37.528296" elapsed="0.000597"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:37.529238" elapsed="0.000045"/>
</return>
<status status="PASS" start="2026-04-13T02:57:37.528974" elapsed="0.000456"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:37.528951" elapsed="0.000518"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:37.529522" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.534103" elapsed="0.000987"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:37.535511" elapsed="0.000701"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:37.536581" elapsed="0.000550"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:37.530055" elapsed="0.007348"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:37.181101" elapsed="0.356469"/>
</kw>
<msg time="2026-04-13T02:57:37.537677" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.179915" elapsed="0.357851"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:37.179207" elapsed="0.358680"/>
</kw>
<msg time="2026-04-13T02:57:37.537947" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.178408" elapsed="0.359624"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.541913" 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-04-13T02:57:37.542747" elapsed="0.000221"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:37.543151" elapsed="0.000104"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:37.538452" elapsed="0.004855"/>
</kw>
<msg time="2026-04-13T02:57:37.543402" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:37.177164" elapsed="0.366264"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.543883" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.543611" elapsed="0.000312"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:37.543971" elapsed="0.000034"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:37.175669" elapsed="0.368431"/>
</kw>
<msg time="2026-04-13T02:57:37.544186" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:37.174973" elapsed="0.369237"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:37.545117" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:37.544844" elapsed="0.000300"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:37.545907" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:37.550968" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.552013" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.551393" elapsed="0.000667"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:37.552653" level="INFO">${conn_id} = 52</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:37.552200" elapsed="0.000480"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.554073" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:37.554241" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:37.553403" elapsed="0.000863"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.554468" elapsed="0.000806"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:37.557493" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:37.871378" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:37 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:37.556835" elapsed="0.314849"/>
</kw>
<msg time="2026-04-13T02:57:37.871857" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.555522" elapsed="0.316518"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:37.552942" elapsed="0.319328"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:37.872991" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:57:37.885326" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:37.885504" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:57:37.885572" 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-04-13T02:57:37.872580" elapsed="0.013026"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:37.885868" elapsed="0.000351"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.887372" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.886602" elapsed="0.000870"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:37.887978" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:37.887687" elapsed="0.000397"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:37.887596" elapsed="0.000542"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:37.888518" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-04-13T02:57:37.888261" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:37.888225" elapsed="0.000520"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:37.888822" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.929083" elapsed="0.000790"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:37.930051" elapsed="0.000182"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:37.930372" elapsed="0.000105"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:37.889534" elapsed="0.041000"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:37.549856" elapsed="0.380792"/>
</kw>
<msg time="2026-04-13T02:57:37.930715" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.549143" elapsed="0.381634"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:37.548588" elapsed="0.382272"/>
</kw>
<msg time="2026-04-13T02:57:37.930907" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.546191" elapsed="0.384766"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.933904" 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-04-13T02:57:37.934433" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:37.934728" 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-04-13T02:57:37.931258" elapsed="0.003621"/>
</kw>
<msg time="2026-04-13T02:57:37.934973" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:37.545345" elapsed="0.389655"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.935416" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 15 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:57 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.935165" elapsed="0.000301"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:37.935511" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:57:37.935685" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:37.544434" elapsed="0.391277"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.936098" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 15 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:57 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.935853" elapsed="0.000295"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:37.936280" elapsed="0.000299"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:57:36.772068" elapsed="1.164588"/>
</kw>
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.941888" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:37.941573" elapsed="0.000341"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:37.941961" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:57:37.942110" 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-04-13T02:57:37.941225" elapsed="0.000910"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.954876" level="INFO">/rests/operations/data-export-import:schedule-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.954608" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.955302" level="INFO"> {
     "input": {
         "data-export-import:run-at": 500,
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "network-topology",
                 "data-store": "config"
             }
         ]
     }
 }
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.955062" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.955749" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.955486" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.956171" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.955931" elapsed="0.000284"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:37.957017" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:37.956822" elapsed="0.000221"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:37.957351" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:37.957182" elapsed="0.000194"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:37.957550" elapsed="0.000216"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.958155" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.957908" elapsed="0.000292"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:37.958243" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:57:37.958399" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:37.956404" elapsed="0.002020"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:37.986402" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 path_url=/rests/operations/data-export-import:schedule-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '256', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body= {
     "input": {
         "data-export-import:run-at": 500,
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "network-topology",
                 "data-store": "config"
             }
         ]
     }
 }
 
 </msg>
<msg time="2026-04-13T02:57:37.986562" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '45'} 
 body={"data-export-import:output":{"result":true}} 
 </msg>
<msg time="2026-04-13T02:57:37.986734" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:37.960467" elapsed="0.026296"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:37.958502" elapsed="0.028321"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:37.987045" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:37.986856" elapsed="0.000258"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:37.958482" elapsed="0.028654"/>
</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-04-13T02:57:37.990612" level="INFO">{"data-export-import:output":{"result":true}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.988251" elapsed="0.002424"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:37.988027" elapsed="0.002684"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:37.988007" elapsed="0.002729"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.993176" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:37.991000" elapsed="0.002223"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:37.990793" elapsed="0.002464"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:37.990775" elapsed="0.002506"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.993859" 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-04-13T02:57:37.993439" elapsed="0.000448"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:37.994175" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:37.993957" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.994718" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:37.994400" elapsed="0.000344"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:37.994256" elapsed="0.000523"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:37.993939" elapsed="0.000862"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.995308" 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-04-13T02:57:37.994941" elapsed="0.000393"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:37.995665" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:37.995428" elapsed="0.000295"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:37.996186" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:37.995889" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:37.995747" elapsed="0.000500"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:37.995409" elapsed="0.000859"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:37.996405" elapsed="0.000398"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:37.997249" 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-04-13T02:57:37.996953" elapsed="0.000322"/>
</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-04-13T02:57:37.997411" elapsed="0.002374"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:37.987530" elapsed="0.012383"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:38.000100" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:37.999989" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:37.999970" elapsed="0.000202"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:38.002719" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:38.000304" elapsed="0.002443"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:38.002798" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:57:38.002961" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:37.951871" elapsed="0.051115"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:38.003053" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:57:38.003203" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:37.949408" elapsed="0.053820"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:38.003279" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:57:38.003426" level="INFO">${response_json} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_json}</var>
<arg>${SCHEDULE_EXPORT_URL}</arg>
<arg>${json}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:37.940758" elapsed="0.062694"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.003867" level="INFO">{
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:38.003600" elapsed="0.000311"/>
</kw>
<arg>${controller_index}</arg>
<arg>500</arg>
<arg>${TRUE}</arg>
<arg>${module}</arg>
<arg>${store}</arg>
<doc>Schedule Export job</doc>
<status status="PASS" start="2026-04-13T02:57:36.769516" elapsed="1.234450"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.011571" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:38.011272" elapsed="0.000326"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:38.011724" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:57:38.011875" 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-04-13T02:57:38.010944" elapsed="0.000956"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.024513" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:38.024251" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.024972" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:38.024733" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.025391" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:38.025148" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.025821" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:38.025568" elapsed="0.000295"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:38.026620" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:38.026430" elapsed="0.000236"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:38.026971" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:38.026804" elapsed="0.000192"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:38.027135" elapsed="0.000188"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.027736" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:38.027467" elapsed="0.000314"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:38.027823" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:57:38.027980" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:38.026045" elapsed="0.001962"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:38.039512" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:57:38.039877" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '373'} 
 body={"data-export-import:output":{"run-at":"2026-04-13T02:57:42Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:37Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:38Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:37Z","status":"scheduled"}]}} 
 </msg>
<msg time="2026-04-13T02:57:38.039976" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:38.030308" elapsed="0.009694"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:38.028124" elapsed="0.011923"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:38.040214" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:38.040074" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:38.028104" elapsed="0.012196"/>
</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-04-13T02:57:38.043605" level="INFO">{"data-export-import:output":{"run-at":"2026-04-13T02:57:42Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:37Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:38Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:37Z","status":"scheduled"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:38.041343" elapsed="0.002326"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:38.041134" elapsed="0.002570"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:38.041114" elapsed="0.002615"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.046191" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:38.043993" elapsed="0.002244"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:38.043786" elapsed="0.002486"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:38.043769" elapsed="0.002527"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.046835" 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-04-13T02:57:38.046442" elapsed="0.000420"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:38.047148" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:38.046932" elapsed="0.000278"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.047690" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:38.047377" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:38.047234" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:38.046914" elapsed="0.000858"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.048274" 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-04-13T02:57:38.047913" elapsed="0.000387"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:38.048598" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:38.048369" elapsed="0.000304"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.049130" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:38.048838" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:38.048696" elapsed="0.000495"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:38.048351" elapsed="0.000861"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:38.049347" elapsed="0.000357"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:38.050128" 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-04-13T02:57:38.049854" elapsed="0.000300"/>
</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-04-13T02:57:38.050292" elapsed="0.002158"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:38.040698" elapsed="0.011814"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:38.052785" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:38.052675" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:38.052654" elapsed="0.000197"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:38.055444" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:38.052986" elapsed="0.002487"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:38.055523" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:57:38.055694" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:38.021690" elapsed="0.034030"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:38.055786" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:57:38.055934" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:38.019212" elapsed="0.036747"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:38.056009" elapsed="0.000024"/>
</return>
<msg time="2026-04-13T02:57:38.056153" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:38.008869" elapsed="0.047309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.056593" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:38Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:42Z",
  "status": "scheduled"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:38.056324" elapsed="0.000333"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.057096" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:57:38.056795" elapsed="0.000328"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<msg time="2026-04-13T02:57:38.058082" level="FAIL">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:38Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:42Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</msg>
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="FAIL" start="2026-04-13T02:57:38.057697" elapsed="0.000464">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:38Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:42Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:57:38.058419" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:38.058245" elapsed="0.000230"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="NOT RUN" start="2026-04-13T02:57:38.058672" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:38.058498" elapsed="0.000229"/>
</branch>
<status status="NOT RUN" start="2026-04-13T02:57:38.058227" elapsed="0.000520"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="FAIL" start="2026-04-13T02:57:38.057338" elapsed="0.001517">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:38Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:42Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Verify export status is as expected</doc>
<status status="FAIL" start="2026-04-13T02:57:38.004622" elapsed="0.054343">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:37Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:38Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:42Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.072031" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:43.071591" elapsed="0.000474"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:43.072141" elapsed="0.000046"/>
</return>
<msg time="2026-04-13T02:57:43.072331" 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-04-13T02:57:43.071226" elapsed="0.001133"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.085494" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.085196" elapsed="0.000351"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.085956" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.085709" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.086436" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.086139" elapsed="0.000348"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.086895" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.086642" elapsed="0.000298"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:43.087810" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:43.087583" elapsed="0.000254"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:43.088154" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:43.087978" elapsed="0.000202"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:43.088315" elapsed="0.000206"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.088932" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.088678" elapsed="0.000299"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:43.089024" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T02:57:43.089199" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:43.087152" elapsed="0.002073"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:43.100370" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:57:43.101829" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '886'} 
 body={"data-export-import:output":{"status":"complete","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:42Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:42Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:42Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"}]}} 
 </msg>
<msg time="2026-04-13T02:57:43.102102" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:43.091382" elapsed="0.010781"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:43.089307" elapsed="0.012965"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:43.102746" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:43.102333" elapsed="0.000575"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:43.089285" elapsed="0.013672"/>
</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-04-13T02:57:43.111529" level="INFO">{"data-export-import:output":{"status":"complete","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:42Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:42Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:42Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.105467" elapsed="0.006218"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:43.104983" elapsed="0.006745"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:43.104936" elapsed="0.006822"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.114275" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.112069" elapsed="0.002254"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:43.111830" elapsed="0.002529"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:43.111808" elapsed="0.002576"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.115056" 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-04-13T02:57:43.114607" elapsed="0.000477"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:43.115406" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:43.115179" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.115968" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:43.115656" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:43.115496" elapsed="0.000534"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:43.115158" elapsed="0.000894"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.116561" 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-04-13T02:57:43.116193" elapsed="0.000395"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:43.116895" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:43.116676" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.117426" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:43.117117" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:43.116976" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:43.116656" elapsed="0.000854"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.117668" elapsed="0.000355"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:43.118477" 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-04-13T02:57:43.118174" elapsed="0.000329"/>
</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-04-13T02:57:43.118655" elapsed="0.002250"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:43.103848" elapsed="0.017128"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:43.121169" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:43.121055" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:43.121034" elapsed="0.000207"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:43.124084" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:43.121375" elapsed="0.002741"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:43.124170" elapsed="0.000038"/>
</return>
<msg time="2026-04-13T02:57:43.124497" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:43.082528" elapsed="0.041999"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:43.124597" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T02:57:43.124772" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:43.079920" elapsed="0.044917"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:43.124966" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:57:43.125126" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:43.069056" elapsed="0.056097"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.125651" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:57:42Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.170.138:2550",
    "status": "complete"
   },
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:57:42Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.170.156:2550",
    "status": "complete"
   },
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:57:42Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.171.185:2550",
    "status": "complete"
   }
  ],
  "status": "complete"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.125315" elapsed="0.000412"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.126185" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:57:43.125873" elapsed="0.000340"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:43.126860" elapsed="0.000461"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:57:43.128194" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:43.127554" elapsed="0.000850"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${config_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:43.129149" elapsed="0.000340"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${models_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:43.129709" elapsed="0.000385"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${operational_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:43.130240" elapsed="0.000335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.130948" level="INFO">Found all Json Files</msg>
<arg>Found all Json Files</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.130736" elapsed="0.000256"/>
</kw>
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="PASS" start="2026-04-13T02:57:43.128643" elapsed="0.002403"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:43.128434" elapsed="0.002642"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:43.127530" elapsed="0.003568"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:43.126471" elapsed="0.004694"/>
</kw>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Verify export status is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:43.059977" elapsed="0.071244"/>
</kw>
<arg>10 sec</arg>
<arg>5 sec</arg>
<arg>Verify Export Status</arg>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-13T02:57:38.004121" elapsed="5.127151"/>
</kw>
<kw name="Verify Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.132225" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:43.131834" elapsed="0.000430"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:43.133613" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:43.133190" elapsed="0.000479"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:43.135229" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:43.139335" elapsed="0.000477"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.140760" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.140018" elapsed="0.000812"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:43.141534" 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-04-13T02:57:43.141036" elapsed="0.000533"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.142969" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:43.143106" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:43.142448" elapsed="0.000699"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.143318" elapsed="0.000644"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:43.145702" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:43.499961" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:37 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:43.144757" elapsed="0.355461"/>
</kw>
<msg time="2026-04-13T02:57:43.500430" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.144197" elapsed="0.356354"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:43.141897" elapsed="0.358843"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:43.501787" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json'.</msg>
<msg time="2026-04-13T02:57:43.514989" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:43.515258" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<msg time="2026-04-13T02:57:43.515323" 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-04-13T02:57:43.501070" elapsed="0.014287"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:43.515700" elapsed="0.000448"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.516945" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.516468" elapsed="0.000540"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:43.517342" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:43.517133" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:43.517096" elapsed="0.000356"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:43.517704" elapsed="0.000048"/>
</return>
<status status="PASS" start="2026-04-13T02:57:43.517529" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:43.517508" elapsed="0.000341"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:43.517903" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.521909" 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-04-13T02:57:43.522747" elapsed="0.000266"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:43.523229" 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-04-13T02:57:43.518373" elapsed="0.005072"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:43.138012" elapsed="0.385568"/>
</kw>
<msg time="2026-04-13T02:57:43.523772" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.137239" elapsed="0.386615"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:43.136509" elapsed="0.387462"/>
</kw>
<msg time="2026-04-13T02:57:43.524030" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.135604" elapsed="0.388489"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.527999" elapsed="0.000447"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:43.528675" elapsed="0.000207"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:43.529069" elapsed="0.000138"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:43.524511" elapsed="0.004771"/>
</kw>
<msg time="2026-04-13T02:57:43.529413" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:43.133996" elapsed="0.395452"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.530131" level="INFO">-rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.529719" elapsed="0.000477"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:43.530258" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T02:57:43.530478" level="INFO">${cfg} = -rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<var>${cfg}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_DATA_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:43.132578" elapsed="0.397936"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.531157" level="INFO">-rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<arg>${cfg}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.530795" elapsed="0.000425"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${cfg}</arg>
<arg>.*${EXP_DATA_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:43.531432" elapsed="0.000372"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:43.532775" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:43.532439" elapsed="0.000365"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:43.533578" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:43.536658" elapsed="0.000458"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.537682" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.537253" elapsed="0.000477"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:43.538246" level="INFO">${conn_id} = 58</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:43.537871" elapsed="0.000401"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.539249" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:43.539374" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:43.538900" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.539576" elapsed="0.000431"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:43.541517" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:43.952937" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:43 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:43.540559" elapsed="0.412592"/>
</kw>
<msg time="2026-04-13T02:57:43.953339" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.540195" elapsed="0.413234"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:43.538477" elapsed="0.415080"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:43.954082" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json'.</msg>
<msg time="2026-04-13T02:57:43.967326" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:43.967722" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<msg time="2026-04-13T02:57:43.967831" 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-04-13T02:57:43.953825" elapsed="0.014071"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:43.968411" elapsed="0.000711"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.970463" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.969529" elapsed="0.001005"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:43.970909" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:43.970697" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:43.970648" elapsed="0.000369"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:43.971243" elapsed="0.000047"/>
</return>
<status status="PASS" start="2026-04-13T02:57:43.971093" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:43.971072" elapsed="0.000308"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:43.971444" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.976040" elapsed="0.000728"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:43.977068" elapsed="0.000246"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:43.977512" 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-04-13T02:57:43.972112" elapsed="0.005684"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:43.535587" elapsed="0.442341"/>
</kw>
<msg time="2026-04-13T02:57:43.978007" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.535004" elapsed="0.443088"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:43.534408" elapsed="0.443880"/>
</kw>
<msg time="2026-04-13T02:57:43.978367" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.533911" elapsed="0.444525"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.982723" elapsed="0.000362"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:43.983241" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:43.983663" elapsed="0.000104"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:43.978991" elapsed="0.004831"/>
</kw>
<msg time="2026-04-13T02:57:43.983919" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:43.533018" elapsed="0.450928"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.984380" level="INFO">-rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.984122" elapsed="0.000304"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:43.984473" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:57:43.984652" level="INFO">${mdl} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<var>${mdl}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${MODELS_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:43.532026" elapsed="0.452653"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.985070" level="INFO">-rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<arg>${mdl}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.984824" elapsed="0.000290"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${mdl}</arg>
<arg>.*${MODELS_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:43.985250" elapsed="0.000345"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:43.986596" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:43.986290" elapsed="0.000334"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:43.987510" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:43.990506" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.991430" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:43.990946" elapsed="0.000533"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:43.992019" level="INFO">${conn_id} = 61</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:43.991639" elapsed="0.000417"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:43.993333" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:43.993414" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:43.992777" elapsed="0.000661"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.993589" elapsed="0.000465"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:43.995377" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:44.396315" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:43 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:43.994602" elapsed="0.401991"/>
</kw>
<msg time="2026-04-13T02:57:44.396791" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.994211" elapsed="0.402667"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:43.992343" elapsed="0.404648"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:44.397469" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json'.</msg>
<msg time="2026-04-13T02:57:44.410729" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:44.411032" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<msg time="2026-04-13T02:57:44.411132" 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-04-13T02:57:44.397217" elapsed="0.013967"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:44.411579" elapsed="0.000547"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.413145" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:44.412490" elapsed="0.000748"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:44.413721" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:44.413406" elapsed="0.000463"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:44.413358" elapsed="0.000565"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:44.414280" elapsed="0.000064"/>
</return>
<status status="PASS" start="2026-04-13T02:57:44.414041" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:44.414008" elapsed="0.000463"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:44.414564" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:44.419920" 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-04-13T02:57:44.420830" elapsed="0.000251"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:44.421281" 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-04-13T02:57:44.415266" elapsed="0.006244"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:43.989421" elapsed="0.432252"/>
</kw>
<msg time="2026-04-13T02:57:44.421761" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.988868" elapsed="0.433010"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:43.988330" elapsed="0.433680"/>
</kw>
<msg time="2026-04-13T02:57:44.422071" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:43.987840" elapsed="0.434298"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:44.426292" 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-04-13T02:57:44.427098" elapsed="0.000251"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:44.427548" elapsed="0.000169"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:44.422575" elapsed="0.005223"/>
</kw>
<msg time="2026-04-13T02:57:44.427938" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:43.986875" elapsed="0.441103"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.428621" level="INFO">-rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:44.428236" elapsed="0.000479"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:44.428784" elapsed="0.000057"/>
</return>
<msg time="2026-04-13T02:57:44.429030" level="INFO">${opr} = -rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<var>${opr}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_OPER_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:43.985849" elapsed="0.443220"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.429783" level="INFO">-rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<arg>${opr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:44.429386" elapsed="0.000522"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${opr}</arg>
<arg>.*${EXP_OPER_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:44.430117" elapsed="0.000490"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the backedup files are present in the controller</doc>
<status status="PASS" start="2026-04-13T02:57:43.131495" elapsed="1.299199"/>
</kw>
<kw name="Copy Export Directory To Test VM" owner="DaeximKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.431682" level="INFO">${new_dir} = /tmp/Export10.30.170.156</msg>
<var>${new_dir}</var>
<arg>${EXP_DIR}${host}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:44.431334" elapsed="0.000376"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="Directory Should Exist" owner="OperatingSystem">
<msg time="2026-04-13T02:57:44.432791" level="FAIL">Directory '/tmp/Export10.30.170.156' does not exist.</msg>
<arg>${new_dir}</arg>
<doc>Fails unless the given path points to an existing directory.</doc>
<status status="FAIL" start="2026-04-13T02:57:44.432191" elapsed="0.000681">Directory '/tmp/Export10.30.170.156' does not exist.</status>
</kw>
<msg time="2026-04-13T02:57:44.432967" level="INFO">${directory_exist} = False</msg>
<var>${directory_exist}</var>
<arg>OperatingSystem.Directory Should Exist</arg>
<arg>${new_dir}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-13T02:57:44.431858" elapsed="0.001134"/>
</kw>
<if>
<branch type="IF" condition="${directory_exist}">
<kw name="Cleanup Directory" owner="DaeximKeywords">
<arg>${new_dir}</arg>
<doc>Cleans up the given directory if it exists</doc>
<status status="NOT RUN" start="2026-04-13T02:57:44.433348" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:44.433073" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:44.433049" elapsed="0.000386"/>
</if>
<kw name="Return ConnnectionID" owner="DaeximKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:44.434559" level="INFO">${conn_id} = 64</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:44.434154" elapsed="0.000433"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.435483" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:44.435558" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:44.435183" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:44.435741" elapsed="0.000345"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:44.436918" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:44.758103" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:44 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:44.436583" elapsed="0.321693"/>
</kw>
<msg time="2026-04-13T02:57:44.758390" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:44.436239" elapsed="0.322254"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:44.434807" elapsed="0.323812"/>
</kw>
<return>
<value>${conn_id}</value>
<status status="PASS" start="2026-04-13T02:57:44.758705" elapsed="0.000050"/>
</return>
<msg time="2026-04-13T02:57:44.758957" level="INFO">${connections} = 64</msg>
<var>${connections}</var>
<arg>${host}</arg>
<doc>Returns the connection of any host. Defaults to controller</doc>
<status status="PASS" start="2026-04-13T02:57:44.433601" elapsed="0.325384"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connections}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-13T02:57:44.759205" elapsed="0.000203"/>
</kw>
<kw name="Directory Should Exist" owner="SSHLibrary">
<msg time="2026-04-13T02:57:44.769217" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<arg>${WORKSPACE}/${BUNDLEFOLDER}/daexim</arg>
<doc>Fails if the given ``path`` does not point to an existing directory.</doc>
<status status="PASS" start="2026-04-13T02:57:44.759558" elapsed="0.011397"/>
</kw>
<kw name="Get Directory" owner="SSHLibrary">
<msg time="2026-04-13T02:57:44.795963" level="INFO">'/tmp/karaf-0.24.0/daexim/odl_backup_models.json' -&gt; '/tmp/Export10.30.170.156/odl_backup_models.json'</msg>
<msg time="2026-04-13T02:57:44.796035" level="INFO">'/tmp/karaf-0.24.0/daexim/odl_backup_operational.json' -&gt; '/tmp/Export10.30.170.156/odl_backup_operational.json'</msg>
<msg time="2026-04-13T02:57:44.796074" level="INFO">'/tmp/karaf-0.24.0/daexim/odl_backup_config.json' -&gt; '/tmp/Export10.30.170.156/odl_backup_config.json'</msg>
<arg>${WORKSPACE}/${BUNDLEFOLDER}/daexim</arg>
<arg>${new_dir}</arg>
<doc>Downloads a directory, including its content, from the remote machine to the local machine.</doc>
<status status="PASS" start="2026-04-13T02:57:44.771219" elapsed="0.024928"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:44.796372" elapsed="0.000396"/>
</kw>
<kw name="List Files In Directory" owner="OperatingSystem">
<msg time="2026-04-13T02:57:44.797214" level="INFO" html="true">Listing contents of directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:44.797451" level="INFO">3 files:
odl_backup_config.json
odl_backup_models.json
odl_backup_operational.json</msg>
<msg time="2026-04-13T02:57:44.797616" level="INFO">${output} = ['odl_backup_config.json', 'odl_backup_models.json', 'odl_backup_operational.json']</msg>
<var>${output}</var>
<arg>${new_dir}</arg>
<doc>Wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-13T02:57:44.796972" elapsed="0.000708"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.798341" level="INFO">['odl_backup_config.json', 'odl_backup_models.json', 'odl_backup_operational.json']</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:44.797903" elapsed="0.000502"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:57:44.798904" level="INFO" html="true">Getting file '&lt;a href="file:///tmp/Export10.30.170.156/odl_backup_config.json"&gt;/tmp/Export10.30.170.156/odl_backup_config.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:44.799111" level="INFO">${fl} = {"aaa-cert-mdsal:key-stores":{"id":"KeyStores:1","ssl-data":[{"bundle-name":"opendaylight","tls-protocols":"","odl-keystore":{"store-password":"5AHEJ7sg5yvn74BHdl3sKsButoYSv7IFunwcn/9FN7fJDf8j7AKIxOw7...</msg>
<var>${fl}</var>
<arg>${new_dir}/${EXP_DATA_FILE}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:57:44.798611" elapsed="0.000538"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.799769" level="INFO">{"aaa-cert-mdsal:key-stores":{"id":"KeyStores:1","ssl-data":[{"bundle-name":"opendaylight","tls-protocols":"","odl-keystore":{"store-password":"5AHEJ7sg5yvn74BHdl3sKsButoYSv7IFunwcn/9FN7fJDf8j7AKIxOw7bvA=","sign-alg":"SHA1WithRSAEncryption","validity":365,"alias":"controller","name":"ctl.jks","dname":"CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA","keystoreFile":"5AHEJ7sg5yvn74BHdl3sKljZHlNBxepq9UVvplUbDCmbzXbnqNyfc0D2mRtXS8605DgJkbHckr6kzFwBi6bdLunBdEOjqbmCiaOoJ2Ysgc5WH/YelOknGWty27ndIcygPzbooOjZ9I7mdKx55PRv5hX0yWvV41CnpBfCpCi1zYd8upW8UIkuFDz0cSlPfKe2x0CF/Q0/wx7VwLqhH2YDhJRqQsSlTWqZ7igaPPqYspg5JDbYlLxHYV3dfLLXH10xTIs3X0yFCgM7k41W97fR2sqXz2ZDU5bR51Oet489hHRYP0WyGSOkJ9qy46tvAoclN1KQCmYHRAHQqu03UeQHjkJCIotJlfLo1bX3358XOfmaC9MBptVdaEpjKmV/ZA+5uTJys5Hro1W0nxWWF2xqiboUSlurFwlLsKS7Sre58YydoLRnmCj/ee0aoYsP2KCPpmdiddxwC0DoRKhFCVfK22dLidfqE8EJ1iUMbGO0qAiTF+SwXLBE2GDtxF/sMRgZv0WjVi/K8Ye8LtkkaWJyiEOcebteHz8/P1lQFuycrAnZs9bgxHijz0uiOs2ut79VxisQhpD5iWRXQwyvFyzJv5/ypwCMK4DZw91tpOWJi2/e3wKVMJ9wgNrwA9RkiBjEUCsw7aUPcI8IkGm6x8mI77W8FmN9gD9lso+0SBlHvPlbZV4FRQaMnWkp6M2BKRhWfTR3EwPd4Xh3Z/SXTpUmBRRG7AhZsGZq1twe/y4Zk0JmzB4/KilwCVIyaez/MJbUT8TVQVI/1oHmUxk51QWvNCgq8rRCQ43dIh/XksPE00b6Urh3qeUcmFHl86vB4WCPyjkcdfeZEErr9YHnNoRmlU1ww0p0LQdV/kONje0u32NjROF5LI9iDBvgsrDhwHbRRiOKLbuy7bDZ28oHAhUhKByr/6YycHNkz7kWT6MRtfZQ0IKZCubX5si3UfGEQfw791dwcnmPI5ip+x2wNIfNsNiIi6stNNPhHeYRGyD+U5WMkleFNSwBjDJa4+NdHbOYBOphjTi6cygJRuyg16M8+av3PRHlJajcDw7yMH6jCbmS7sd6f5Ui3WMc079SK0N0H9DeoUdEYNks6FTzQhIn5VbM563Cob8ep4MdGZcINhIwLlEe1Yy8RzXGn9/UBOaKGgOX6aYr7yav2tT6ghFRRLZdf9JoqfNg9x67De25OChjonXx46NEZHGsHwkDmjXJdCPtSBs6eVtGjKsPmXwQi8j67+KSdXTgX1WWbMJmfmXg71SjYS4U83WvDTkBiXgRr5rPXP+mIijq8JUoRAeN8K7WHQ6TFJorSgogq5GqKvYj5BiL25Lg+zoZyFjizASoOESZjcVVEs03Qfe9wYAKoHsoUcGc7+ktoVBXP3jEK29fjytLOY1ZDeYM63SBLKUR6Y1ZVcU1zkLwgNC8+tW443UBfrCK7/W7TObeNBhIJqisulQn0cyiKUtSkYPC82hlDWEYp6Cd4nLj70hcO4F2j65XolF9u2mkazU6JolG4sno8mhw4FBrQT27Xb6d6jWbW9zug9GDKdFFSdqMJn/cAjJzWlNK/TiM+H7B+DfFmFWLvdcoCPNToRbx2ZO0PQX9GjN4vOekxZ7PcVtXr4UX9nyvvei2BtY/VPRgr/fQDsloHmNY/eHR40x3xPolOADo5e4X1xQ7wIrJWHiGyApUMCS1lvsYEL468XVplmq6gA3nldaWPhuJCKNrd6CobrafrNvOiICfg/TL3IoUQ3dzpMhJ/egbkT5/5LZrN019LbvZUqolKyE32eXMhzCVxwuPJxrexoOquJQ8y/7C6G3HgWg=","key-alg":"RSA","keysize":1024},"cipher-suites":[{"suiteName":""}],"trust-keystore":{"keystoreFile":"5AHEJ7sg5yvn74BHdl3sKljZHlNBxepq9UVvp70b7dvd0eJy300XbNkxGKmQugFXL1FQtzgOwqJraU38pFhjXw==","store-password":"5AHEJ7sg5yvn74BHdl3sKuJCqo51qaBawz8VlnYlif8VT3m2ixY56Ef+2KM=","name":"truststore.jks"}}]},"aaa-encrypt-service-config:aaa-encrypt-service-config":{"encrypt-type":"AES","encrypt-key-length":128,"password-length":12,"cipher-transforms":"AES/GCM/NoPadding","encrypt-key":"pqO7nsOXMyRk","encrypt-salt":"5AHEJ7sg5yvn74BHdl3sKg==","auth-tag-length":128,"encrypt-method":"PBKDF2WithHmacSHA1","encrypt-iteration-count":32768}}</msg>
<arg>${fl}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:44.799368" elapsed="0.000501"/>
</kw>
<arg>${host}</arg>
<doc>This keyword copies the daexim folder genereated in the controller to robot vm. This is done to editing if needed on the json files</doc>
<status status="PASS" start="2026-04-13T02:57:44.430999" elapsed="0.368957"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.800915" level="INFO">${export_file} = odl_backup_config.json</msg>
<var>${export_file}</var>
<arg>'${store}' == 'operational'</arg>
<arg>${EXP_OPER_FILE}</arg>
<arg>${EXP_DATA_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:57:44.800183" elapsed="0.000771"/>
</kw>
<kw name="Join Path" owner="OperatingSystem">
<msg time="2026-04-13T02:57:44.801607" level="INFO">${file_path} = /tmp/Export10.30.170.156/odl_backup_config.json</msg>
<var>${file_path}</var>
<arg>${EXP_DIR}${host}</arg>
<arg>${export_file}</arg>
<doc>Joins the given path part(s) to the given base path.</doc>
<status status="PASS" start="2026-04-13T02:57:44.801183" elapsed="0.000492"/>
</kw>
<return>
<value>${file_path}</value>
<status status="PASS" start="2026-04-13T02:57:44.801758" elapsed="0.000057"/>
</return>
<msg time="2026-04-13T02:57:44.802012" level="INFO">${file1} = /tmp/Export10.30.170.156/odl_backup_config.json</msg>
<var>${file1}</var>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>config</arg>
<arg>network-topology</arg>
<doc>Schedules a export with exclude option. Returns the file that has the excluded export.</doc>
<status status="PASS" start="2026-04-13T02:57:36.765310" elapsed="8.036746"/>
</kw>
<kw name="Grep File" owner="OperatingSystem">
<msg time="2026-04-13T02:57:44.802792" level="INFO" html="true">Reading file '&lt;a href="file:///tmp/Export10.30.170.156/odl_backup_config.json"&gt;/tmp/Export10.30.170.156/odl_backup_config.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:44.802918" level="INFO">0 out of 1 lines matched.</msg>
<msg time="2026-04-13T02:57:44.803051" level="INFO">${lines1} = </msg>
<var>${lines1}</var>
<arg>${file1}</arg>
<arg>network-topology:</arg>
<doc>Returns the lines of the specified file that match the ``pattern``.</doc>
<status status="PASS" start="2026-04-13T02:57:44.802291" elapsed="0.000803"/>
</kw>
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.806094" level="INFO">Length is 0.</msg>
<arg>${lines1}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-13T02:57:44.803307" elapsed="0.002867"/>
</kw>
<kw name="Schedule Exclude Export" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.807660" level="INFO">${controller_index} = 1</msg>
<var>${controller_index}</var>
<arg>${controller_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:44.807176" elapsed="0.000523"/>
</kw>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:44.808837" level="INFO">${ip_address} = 10.30.170.156</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:44.808398" elapsed="0.000482"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-13T02:57:44.808967" elapsed="0.000055"/>
</return>
<msg time="2026-04-13T02:57:44.809204" level="INFO">${host} = 10.30.170.156</msg>
<var>${host}</var>
<arg>${controller_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-13T02:57:44.807977" elapsed="0.001306"/>
</kw>
<kw name="Schedule Export" owner="DaeximKeywords">
<if>
<branch type="IF" condition="${include}">
<kw name="Set Variable" owner="BuiltIn">
<var>${file}</var>
<arg>${EXPORT_INCLUDE_FILE}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:44.810594" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:44.810373" elapsed="0.000296"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.811196" level="INFO">${file} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export_exclude.json</msg>
<var>${file}</var>
<arg>${exclude}</arg>
<arg>${EXPORT_EXCLUDE_FILE}</arg>
<arg>${EXPORT_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:57:44.810834" elapsed="0.000390"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:44.810696" elapsed="0.000569"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:44.810343" elapsed="0.000944"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:57:44.811555" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export_exclude.json"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export_exclude.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:44.811728" level="INFO">${json} =  {
     "input": {
         "data-export-import:run-at": ${time},
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "${module}",
                 "data-...</msg>
<var>${json}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:57:44.811418" elapsed="0.000338"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.812268" level="INFO">${json} =  {
     "input": {
         "data-export-import:run-at": 500,
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "opendaylight-inventory",
              ...</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-13T02:57:44.811897" elapsed="0.000398"/>
</kw>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.813157" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:44.812854" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.825563" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:44.825248" elapsed="0.000342"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:44.825651" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:57:44.825801" 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-04-13T02:57:44.824923" elapsed="0.000903"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.828535" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:44.828287" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:44.831110" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:57:44.830650" elapsed="0.001030">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:57:44.828665" elapsed="0.003097">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:44.831933" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:44.831795" elapsed="0.000200"/>
</branch>
<status status="FAIL" start="2026-04-13T02:57:44.828645" elapsed="0.003373">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:57:44.832374" elapsed="0.000025"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:44.832446" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:57:44.826080" elapsed="0.006476">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:44.832616" elapsed="0.000029"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-13T02:57:44.824536" elapsed="0.008194">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:44.832890" elapsed="0.000021"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:44.832962" elapsed="0.000014"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:57:44.822289" elapsed="0.010770">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:44.813405" elapsed="0.019762"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:44.834415" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:44.834145" elapsed="0.000297"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:44.835199" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:44.839476" elapsed="0.000332"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.840869" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:44.840013" elapsed="0.000989"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:44.842045" level="INFO">${conn_id} = 65</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:44.841213" elapsed="0.000874"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:44.844332" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:44.844836" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:44.843707" elapsed="0.001230"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:44.845938" elapsed="0.000596"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:44.848336" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:45.177276" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:44 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:44.848011" elapsed="0.329426"/>
</kw>
<msg time="2026-04-13T02:57:45.177582" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:44.847327" elapsed="0.330391"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:44.842388" elapsed="0.335483"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:45.178559" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:57:45.201719" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:57:45.201927" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:57:45.201999" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:57:45.178181" elapsed="0.023857"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:45.202337" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.203402" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.202898" 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-04-13T02:57:45.204022" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:45.203799" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:45.203769" elapsed="0.000403"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:45.204405" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-13T02:57:45.204227" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:45.204211" elapsed="0.000355"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:45.204603" elapsed="0.000016"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:45.207940" elapsed="0.000605"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:45.208850" elapsed="0.000489"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:45.209591" elapsed="0.000382"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:45.204994" elapsed="0.005082"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:44.837424" elapsed="0.372764"/>
</kw>
<msg time="2026-04-13T02:57:45.210245" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:44.836467" elapsed="0.373834"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:44.835956" elapsed="0.374423"/>
</kw>
<msg time="2026-04-13T02:57:45.210420" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:44.835465" elapsed="0.375000"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:45.213295" elapsed="0.000351"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:45.213799" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:45.214082" 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-04-13T02:57:45.210759" elapsed="0.003473"/>
</kw>
<msg time="2026-04-13T02:57:45.214325" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:44.834659" elapsed="0.379691"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.214781" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.214518" elapsed="0.000304"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:45.214865" elapsed="0.000030"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:44.833758" elapsed="0.381233"/>
</kw>
<msg time="2026-04-13T02:57:45.215078" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:44.833315" elapsed="0.381788"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:45.216344" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:45.216070" elapsed="0.000301"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:45.217221" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:45.221211" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.222571" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.221749" elapsed="0.000974"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:45.223751" level="INFO">${conn_id} = 68</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:45.222953" elapsed="0.000839"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.225766" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:45.225965" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:45.225259" elapsed="0.000804"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:45.226873" elapsed="0.000819"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:45.229637" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:45.533700" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:45 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:45.229288" elapsed="0.304627"/>
</kw>
<msg time="2026-04-13T02:57:45.534121" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:45.228491" elapsed="0.305779"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:45.224095" elapsed="0.310398"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:45.535605" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:57:45.549349" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:57:45.549826" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:57:45.550004" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:57:45.534992" elapsed="0.015120"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:45.550919" elapsed="0.000805"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.553741" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.552353" elapsed="0.001690"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:45.554967" elapsed="0.000047"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:45.554405" elapsed="0.000835"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:45.554329" elapsed="0.000979"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:45.555887" elapsed="0.000067"/>
</return>
<status status="PASS" start="2026-04-13T02:57:45.555439" elapsed="0.000743"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:45.555404" elapsed="0.000839"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:45.556337" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:45.560485" elapsed="0.000810"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:45.561659" elapsed="0.000497"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:45.562477" elapsed="0.000460"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:45.557310" elapsed="0.005758"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:45.219169" elapsed="0.344067"/>
</kw>
<msg time="2026-04-13T02:57:45.563416" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:45.218492" elapsed="0.344998"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:45.217977" elapsed="0.345601"/>
</kw>
<msg time="2026-04-13T02:57:45.563620" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:45.217491" elapsed="0.346195"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:45.567355" elapsed="0.000425"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:45.568008" elapsed="0.000178"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:45.568325" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:45.563990" elapsed="0.004490"/>
</kw>
<msg time="2026-04-13T02:57:45.568579" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:45.216579" elapsed="0.352026"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.569121" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.568817" elapsed="0.000347"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:45.569224" elapsed="0.000040"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:45.215681" elapsed="0.353690"/>
</kw>
<msg time="2026-04-13T02:57:45.569463" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:45.215255" elapsed="0.354233"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:45.570428" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:45.570148" elapsed="0.000307"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:45.571366" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:45.575179" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.576475" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.575656" elapsed="0.000888"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:45.577647" level="INFO">${conn_id} = 71</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:45.576772" elapsed="0.000916"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.579557" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:45.579805" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:45.578763" elapsed="0.001080"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:45.580130" elapsed="0.001104"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:45.584395" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:45.893874" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:45 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:45.583709" elapsed="0.310385"/>
</kw>
<msg time="2026-04-13T02:57:45.894219" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:45.581660" elapsed="0.312691"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:45.578127" elapsed="0.316439"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:45.895127" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:57:45.907788" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:45.908138" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:57:45.908311" 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-04-13T02:57:45.894821" elapsed="0.013580"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:45.908908" elapsed="0.000554"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.910934" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.910029" elapsed="0.001012"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:45.911734" elapsed="0.000057"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:45.911296" elapsed="0.000579"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:45.911216" elapsed="0.000717"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:45.912333" elapsed="0.000066"/>
</return>
<status status="PASS" start="2026-04-13T02:57:45.912066" elapsed="0.000420"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:45.912029" elapsed="0.000538"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:45.912719" elapsed="0.000095"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:45.931789" elapsed="0.000614"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:45.932565" elapsed="0.000234"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:45.932939" elapsed="0.000102"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:45.913671" elapsed="0.019426"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:45.574034" elapsed="0.359159"/>
</kw>
<msg time="2026-04-13T02:57:45.933256" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:45.573283" elapsed="0.360031"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:45.572547" elapsed="0.360849"/>
</kw>
<msg time="2026-04-13T02:57:45.933448" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:45.571684" elapsed="0.361828"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:45.936596" elapsed="0.000389"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:45.937193" elapsed="0.000201"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:45.937579" elapsed="0.000162"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:45.933841" elapsed="0.003980"/>
</kw>
<msg time="2026-04-13T02:57:45.937969" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:45.570803" elapsed="0.367278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.938765" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:57 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.938337" elapsed="0.000512"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:45.938918" elapsed="0.000046"/>
</return>
<msg time="2026-04-13T02:57:45.939152" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:45.569745" elapsed="0.369501"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.940110" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:57 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.939485" elapsed="0.000680"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:45.940309" elapsed="0.000311"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:57:44.812527" elapsed="1.128179"/>
</kw>
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.947147" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:45.946665" elapsed="0.000525"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:45.947265" elapsed="0.000047"/>
</return>
<msg time="2026-04-13T02:57:45.947493" 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-04-13T02:57:45.946160" elapsed="0.001371"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.963684" level="INFO">/rests/operations/data-export-import:schedule-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.963228" elapsed="0.000539"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.964369" level="INFO"> {
     "input": {
         "data-export-import:run-at": 500,
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "opendaylight-inventory",
                 "data-store": "operational"
             }
         ]
     }
 }
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.963988" elapsed="0.000454"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.965271" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.964676" elapsed="0.000644"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.965747" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.965467" elapsed="0.000324"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:45.966663" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:45.966434" elapsed="0.000256"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:45.967065" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:45.966844" elapsed="0.000255"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:45.967286" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:45.968042" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.967785" elapsed="0.000303"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:45.968134" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T02:57:45.968306" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:45.965994" elapsed="0.002337"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:45.990556" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 path_url=/rests/operations/data-export-import:schedule-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '267', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body= {
     "input": {
         "data-export-import:run-at": 500,
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "opendaylight-inventory",
                 "data-store": "operational"
             }
         ]
     }
 }
 
 </msg>
<msg time="2026-04-13T02:57:45.990801" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '45'} 
 body={"data-export-import:output":{"result":true}} 
 </msg>
<msg time="2026-04-13T02:57:45.990995" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:45.970996" elapsed="0.020041"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:45.968498" elapsed="0.022616"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:45.991465" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:45.991158" elapsed="0.000451"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:45.968474" elapsed="0.023201"/>
</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-04-13T02:57:45.998216" level="INFO">{"data-export-import:output":{"result":true}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.993325" elapsed="0.004998"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:45.993010" elapsed="0.005392"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:45.992980" elapsed="0.005482"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.004300" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:45.999337" elapsed="0.005034"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:45.998676" elapsed="0.005746"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:45.998581" elapsed="0.005878"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.005337" 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-04-13T02:57:46.004760" elapsed="0.000616"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:46.005800" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:46.005478" elapsed="0.000382"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.006331" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:46.006029" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:46.005884" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:46.005451" elapsed="0.000964"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.006941" 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-04-13T02:57:46.006558" elapsed="0.000409"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:46.007256" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:46.007039" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.007789" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:46.007478" elapsed="0.000337"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:46.007337" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:46.007021" elapsed="0.000850"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:46.008012" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:46.008858" 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-04-13T02:57:46.008506" elapsed="0.000378"/>
</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-04-13T02:57:46.009024" elapsed="0.002196"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:45.992250" elapsed="0.019036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:46.011472" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:46.011362" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:46.011343" elapsed="0.000267"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:46.014228" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:46.011763" elapsed="0.002492"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:46.014305" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:57:46.014471" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:45.959164" elapsed="0.055332"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:46.014563" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:57:46.014733" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:45.956166" elapsed="0.058592"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:46.014809" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:57:46.014959" level="INFO">${response_json} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_json}</var>
<arg>${SCHEDULE_EXPORT_URL}</arg>
<arg>${json}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:45.945455" elapsed="0.069529"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.015386" level="INFO">{
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:46.015133" elapsed="0.000298"/>
</kw>
<arg>${controller_index}</arg>
<arg>500</arg>
<arg>${TRUE}</arg>
<arg>${module}</arg>
<arg>${store}</arg>
<doc>Schedule Export job</doc>
<status status="PASS" start="2026-04-13T02:57:44.809706" elapsed="1.205783"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.023426" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:46.023125" elapsed="0.000328"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:46.023499" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:57:46.023665" 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-04-13T02:57:46.022788" elapsed="0.000903"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.036799" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:46.036487" elapsed="0.000369"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.037320" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:46.037036" elapsed="0.000330"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.037799" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:46.037522" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.038266" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:46.037995" elapsed="0.000329"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:46.039165" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:46.038951" elapsed="0.000241"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:46.039589" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:46.039348" elapsed="0.000268"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:46.039806" elapsed="0.000193"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.040416" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:46.040150" elapsed="0.000319"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:46.040512" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:57:46.040774" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:46.038527" elapsed="0.002275"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:46.052808" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:57:46.053356" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '373'} 
 body={"data-export-import:output":{"run-at":"2026-04-13T02:57:50Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:46Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:46Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:45Z","status":"scheduled"}]}} 
 </msg>
<msg time="2026-04-13T02:57:46.053507" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:46.042821" elapsed="0.010723"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:46.040880" elapsed="0.012728"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:46.053891" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:46.053665" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:46.040860" elapsed="0.013158"/>
</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-04-13T02:57:46.059154" level="INFO">{"data-export-import:output":{"run-at":"2026-04-13T02:57:50Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:46Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:46Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:45Z","status":"scheduled"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:46.055504" elapsed="0.003730"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:46.055201" elapsed="0.004083"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:46.055174" elapsed="0.004158"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.062560" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:46.059735" elapsed="0.002870"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:46.059413" elapsed="0.003241"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:46.059389" elapsed="0.003291"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.063242" 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-04-13T02:57:46.062827" elapsed="0.000442"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:46.063569" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:46.063350" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.064127" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:46.063817" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:46.063665" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:46.063321" elapsed="0.000906"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.064786" 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-04-13T02:57:46.064371" elapsed="0.000443"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:46.065106" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:46.064882" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.065620" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:46.065327" elapsed="0.000333"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:46.065186" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:46.064864" elapsed="0.000852"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:46.065851" elapsed="0.000370"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:46.066680" 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-04-13T02:57:46.066369" 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-04-13T02:57:46.066855" elapsed="0.002260"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:46.054528" elapsed="0.014649"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:46.069357" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:46.069250" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:46.069231" elapsed="0.000192"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:46.072104" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:45Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:46.069552" elapsed="0.002581"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:46.072215" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:57:46.072373" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:45Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:46.033675" elapsed="0.038723"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:46.072463" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:57:46.072609" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:45Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:46.031189" elapsed="0.041488"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:46.072729" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:57:46.072886" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:45Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:46.020637" elapsed="0.052276"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.073307" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:45Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:46Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:46Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:50Z",
  "status": "scheduled"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:46.073059" elapsed="0.000295"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.073828" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:45Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:57:46.073499" elapsed="0.000356"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<msg time="2026-04-13T02:57:46.074837" level="FAIL">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:45Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:46Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:46Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:50Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</msg>
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="FAIL" start="2026-04-13T02:57:46.074432" elapsed="0.000488">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:45Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:46Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:46Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:50Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:57:46.075203" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:46.075003" elapsed="0.000264"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="NOT RUN" start="2026-04-13T02:57:46.075452" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:46.075291" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-13T02:57:46.074985" elapsed="0.000541"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="FAIL" start="2026-04-13T02:57:46.074073" elapsed="0.001578">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:45Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:46Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:46Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:50Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Verify export status is as expected</doc>
<status status="FAIL" start="2026-04-13T02:57:46.016168" elapsed="0.059598">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:45Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:46Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:46Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:50Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.091590" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:51.090799" elapsed="0.000882"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:51.091796" elapsed="0.000083"/>
</return>
<msg time="2026-04-13T02:57:51.092073" 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-04-13T02:57:51.090018" elapsed="0.002093"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.107127" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:51.106797" elapsed="0.000392"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.107608" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:51.107359" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.108062" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:51.107807" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.108492" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:51.108247" elapsed="0.000287"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:51.109379" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:51.109173" elapsed="0.000232"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:51.109733" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:51.109543" elapsed="0.000216"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:51.109892" elapsed="0.000200"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.110480" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:51.110231" elapsed="0.000292"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:51.110571" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T02:57:51.110764" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:51.108774" elapsed="0.002015"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:51.123327" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:57:51.124939" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '886'} 
 body={"data-export-import:output":{"status":"complete","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:50Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:50Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:50Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"}]}} 
 </msg>
<msg time="2026-04-13T02:57:51.125254" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:51.112941" elapsed="0.012380"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:51.110873" elapsed="0.014591"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:51.126003" elapsed="0.000084"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:51.125541" elapsed="0.000687"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:51.110852" elapsed="0.015431"/>
</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-04-13T02:57:51.133280" level="INFO">{"data-export-import:output":{"status":"complete","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:50Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:50Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:50Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:51.128907" elapsed="0.004428"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:51.128384" elapsed="0.004987"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:51.128337" elapsed="0.005059"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.135981" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:51.133751" elapsed="0.002278"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:51.133454" elapsed="0.002611"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:51.133437" elapsed="0.002653"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.136727" 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-04-13T02:57:51.136252" elapsed="0.000504"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:51.137054" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:51.136829" elapsed="0.000284"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.137603" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:51.137285" elapsed="0.000361"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:51.137138" elapsed="0.000546"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:51.136810" elapsed="0.000896"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.138220" 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-04-13T02:57:51.137851" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:51.138542" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:51.138317" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.139082" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:51.138783" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:51.138638" elapsed="0.000505"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:51.138299" elapsed="0.000865"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:51.139321" elapsed="0.000390"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:51.140173" 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-04-13T02:57:51.139865" 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-04-13T02:57:51.140340" elapsed="0.002248"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:51.127243" elapsed="0.015430"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:51.142864" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:51.142751" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:51.142732" elapsed="0.000203"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:51.145727" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:51.143065" elapsed="0.002693"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:51.145821" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T02:57:51.146007" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:51.103622" elapsed="0.042412"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:51.146100" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:57:51.146251" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:51.100567" elapsed="0.045710"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:51.146328" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:57:51.146483" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:51.086435" elapsed="0.060113"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.146982" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:57:50Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.170.138:2550",
    "status": "complete"
   },
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:57:50Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.170.156:2550",
    "status": "complete"
   },
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:57:50Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.171.185:2550",
    "status": "complete"
   }
  ],
  "status": "complete"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:51.146721" elapsed="0.000314"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.147521" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:57:51.147174" elapsed="0.000377"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:51.148143" elapsed="0.000333"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:57:51.148892" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:51.148561" elapsed="0.000392"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${config_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:51.149579" elapsed="0.000357"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${models_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:51.150103" elapsed="0.000350"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${operational_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:51.150621" elapsed="0.000359"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.151351" level="INFO">Found all Json Files</msg>
<arg>Found all Json Files</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:51.151123" elapsed="0.000272"/>
</kw>
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="PASS" start="2026-04-13T02:57:51.149141" elapsed="0.002309"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:51.148978" elapsed="0.002503"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:51.148541" elapsed="0.002961"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:51.147793" elapsed="0.003754"/>
</kw>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Verify export status is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:51.076542" elapsed="0.075066"/>
</kw>
<arg>10 sec</arg>
<arg>5 sec</arg>
<arg>Verify Export Status</arg>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-13T02:57:46.015659" elapsed="5.136019"/>
</kw>
<kw name="Verify Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.152514" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:51.152210" elapsed="0.000330"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:51.153461" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:51.153193" elapsed="0.000294"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:51.156123" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:51.159278" elapsed="0.000268"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.160137" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:51.159752" elapsed="0.000431"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:51.160716" level="INFO">${conn_id} = 74</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:51.160326" elapsed="0.000416"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.161674" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:51.161753" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:51.161321" elapsed="0.000455"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:51.161919" elapsed="0.000453"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:51.163683" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:51.511989" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:45 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:51.162899" elapsed="0.349280"/>
</kw>
<msg time="2026-04-13T02:57:51.512367" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:51.162531" elapsed="0.349924"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:51.160948" elapsed="0.351624"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:51.513059" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json'.</msg>
<msg time="2026-04-13T02:57:51.525977" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:51.526287" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<msg time="2026-04-13T02:57:51.526400" 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-04-13T02:57:51.512812" elapsed="0.013644"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:51.526915" elapsed="0.000631"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.528793" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:51.528033" elapsed="0.000870"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:51.529431" elapsed="0.000048"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:51.529100" elapsed="0.000479"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:51.529042" elapsed="0.000649"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:51.530150" elapsed="0.000072"/>
</return>
<status status="PASS" start="2026-04-13T02:57:51.529833" elapsed="0.000474"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:51.529794" elapsed="0.000571"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:51.530449" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:51.535097" elapsed="0.000683"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:51.536000" elapsed="0.000234"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:51.536455" 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-04-13T02:57:51.531321" elapsed="0.005393"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:51.157997" elapsed="0.378865"/>
</kw>
<msg time="2026-04-13T02:57:51.536964" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:51.157445" elapsed="0.379601"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:51.156902" elapsed="0.380343"/>
</kw>
<msg time="2026-04-13T02:57:51.537305" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:51.156394" elapsed="0.380995"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:51.541127" elapsed="0.000442"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:51.541805" elapsed="0.000244"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:51.542252" elapsed="0.000140"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:51.537824" elapsed="0.004652"/>
</kw>
<msg time="2026-04-13T02:57:51.542624" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:51.153767" elapsed="0.388917"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.543375" level="INFO">-rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:51.542925" elapsed="0.000522"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:51.543512" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T02:57:51.543760" level="INFO">${cfg} = -rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<var>${cfg}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_DATA_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:51.152779" elapsed="0.391017"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.544252" level="INFO">-rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<arg>${cfg}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:51.544000" elapsed="0.000297"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${cfg}</arg>
<arg>.*${EXP_DATA_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:51.544433" elapsed="0.000352"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:51.545712" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:51.545421" elapsed="0.000318"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:51.546476" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:51.549817" elapsed="0.000257"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.550818" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:51.550210" elapsed="0.000657"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:51.551405" level="INFO">${conn_id} = 77</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:51.551011" elapsed="0.000419"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:51.552380" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:51.552458" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:51.552032" elapsed="0.000450"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:51.552705" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:51.554402" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:51.995286" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:51 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:51.553624" elapsed="0.441863"/>
</kw>
<msg time="2026-04-13T02:57:51.995705" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:51.553276" elapsed="0.442520"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:51.551649" elapsed="0.444265"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:51.996397" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json'.</msg>
<msg time="2026-04-13T02:57:52.009836" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:52.010363" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<msg time="2026-04-13T02:57:52.010473" 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-04-13T02:57:51.996150" elapsed="0.014377"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:52.011032" elapsed="0.000874"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.013010" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:52.012280" elapsed="0.000829"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:52.013569" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:52.013281" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:52.013232" elapsed="0.000526"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:52.014109" elapsed="0.000247"/>
</return>
<status status="PASS" start="2026-04-13T02:57:52.013876" elapsed="0.000553"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:52.013842" elapsed="0.000640"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:52.014556" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:52.020541" 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-04-13T02:57:52.021193" elapsed="0.000184"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:52.021515" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:52.015294" elapsed="0.006411"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:51.548431" elapsed="0.473371"/>
</kw>
<msg time="2026-04-13T02:57:52.021866" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:51.547805" elapsed="0.474123"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:51.547280" elapsed="0.474731"/>
</kw>
<msg time="2026-04-13T02:57:52.022053" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:51.546775" elapsed="0.475324"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:52.024954" elapsed="0.000384"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:52.025512" elapsed="0.000195"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:52.025862" 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-04-13T02:57:52.022399" elapsed="0.003742"/>
</kw>
<msg time="2026-04-13T02:57:52.026249" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:51.545943" elapsed="0.480334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.026746" level="INFO">-rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:52.026463" elapsed="0.000330"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:52.026842" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:57:52.027011" level="INFO">${mdl} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<var>${mdl}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${MODELS_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:51.545008" elapsed="0.482029"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.027459" level="INFO">-rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<arg>${mdl}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:52.027185" elapsed="0.000320"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${mdl}</arg>
<arg>.*${MODELS_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:52.027669" elapsed="0.000345"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:52.028970" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:52.028689" elapsed="0.000309"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:52.029770" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:52.032835" elapsed="0.000278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.033655" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:52.033251" elapsed="0.000454"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:52.034363" level="INFO">${conn_id} = 80</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:52.033864" elapsed="0.000534"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.035460" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:52.035542" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:52.035057" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:52.035758" elapsed="0.000697"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:52.037795" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:52.409757" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:51 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:52.037000" elapsed="0.373040"/>
</kw>
<msg time="2026-04-13T02:57:52.410230" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:52.036618" elapsed="0.373699"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:52.034657" elapsed="0.375774"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:52.410922" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json'.</msg>
<msg time="2026-04-13T02:57:52.423795" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:52.423981" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<msg time="2026-04-13T02:57:52.424082" 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-04-13T02:57:52.410669" elapsed="0.013463"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:52.424483" elapsed="0.000508"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.426035" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:52.425365" elapsed="0.000764"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:52.426598" elapsed="0.000067"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:52.426305" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:52.426255" elapsed="0.000537"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:52.427152" elapsed="0.000061"/>
</return>
<status status="PASS" start="2026-04-13T02:57:52.426911" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:52.426877" elapsed="0.000519"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:52.427473" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:52.432622" elapsed="0.000432"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:52.433210" elapsed="0.000170"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:52.433517" elapsed="0.000101"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:52.428175" elapsed="0.005519"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:52.031708" elapsed="0.402081"/>
</kw>
<msg time="2026-04-13T02:57:52.433847" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:52.031081" elapsed="0.402824"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:52.030544" elapsed="0.403443"/>
</kw>
<msg time="2026-04-13T02:57:52.434029" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:52.030053" elapsed="0.404021"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:52.436733" 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-04-13T02:57:52.437214" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:52.437497" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:52.434364" elapsed="0.003299"/>
</kw>
<msg time="2026-04-13T02:57:52.437759" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:52.029207" elapsed="0.408578"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.438215" level="INFO">-rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:52.437959" elapsed="0.000301"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:52.438307" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:57:52.438463" level="INFO">${opr} = -rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<var>${opr}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_OPER_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:52.028247" elapsed="0.410242"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.438982" level="INFO">-rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<arg>${opr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:52.438730" elapsed="0.000299"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${opr}</arg>
<arg>.*${EXP_OPER_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:52.439170" elapsed="0.000388"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the backedup files are present in the controller</doc>
<status status="PASS" start="2026-04-13T02:57:51.151900" elapsed="1.287723"/>
</kw>
<kw name="Copy Export Directory To Test VM" owner="DaeximKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.440552" level="INFO">${new_dir} = /tmp/Export10.30.170.156</msg>
<var>${new_dir}</var>
<arg>${EXP_DIR}${host}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:52.440232" elapsed="0.000346"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="Directory Should Exist" owner="OperatingSystem">
<msg time="2026-04-13T02:57:52.441264" level="INFO" html="true">Directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;' exists.</msg>
<arg>${new_dir}</arg>
<doc>Fails unless the given path points to an existing directory.</doc>
<status status="PASS" start="2026-04-13T02:57:52.441066" elapsed="0.000249"/>
</kw>
<msg time="2026-04-13T02:57:52.441399" level="INFO">${directory_exist} = True</msg>
<var>${directory_exist}</var>
<arg>OperatingSystem.Directory Should Exist</arg>
<arg>${new_dir}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-13T02:57:52.440742" elapsed="0.000681"/>
</kw>
<if>
<branch type="IF" condition="${directory_exist}">
<kw name="Cleanup Directory" owner="DaeximKeywords">
<kw name="Empty Directory" owner="OperatingSystem">
<msg time="2026-04-13T02:57:52.442461" level="INFO" html="true">Listing contents of directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:52.442704" level="INFO" html="true">Emptied directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<arg>${dir}</arg>
<doc>Deletes all the content from the given directory.</doc>
<status status="PASS" start="2026-04-13T02:57:52.442322" elapsed="0.000435"/>
</kw>
<kw name="Remove Directory" owner="OperatingSystem">
<msg time="2026-04-13T02:57:52.443049" level="INFO" html="true">Listing contents of directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:52.443106" level="INFO" html="true">Directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;' is empty.</msg>
<msg time="2026-04-13T02:57:52.443185" level="INFO" html="true">Removed directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<arg>${dir}</arg>
<doc>Removes the directory pointed to by the given ``path``.</doc>
<status status="PASS" start="2026-04-13T02:57:52.442896" elapsed="0.000333"/>
</kw>
<arg>${new_dir}</arg>
<doc>Cleans up the given directory if it exists</doc>
<status status="PASS" start="2026-04-13T02:57:52.441737" elapsed="0.001587"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:52.441500" elapsed="0.001855"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:52.441479" elapsed="0.001902"/>
</if>
<kw name="Return ConnnectionID" owner="DaeximKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:52.444451" level="INFO">${conn_id} = 83</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:52.444068" elapsed="0.000409"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.445358" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:52.445434" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:52.445073" elapsed="0.000384"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:52.445600" elapsed="0.000376"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:52.446813" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:52.785568" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:52 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:52.446478" elapsed="0.339312"/>
</kw>
<msg time="2026-04-13T02:57:52.785901" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:52.446132" elapsed="0.339870"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:52.444696" elapsed="0.341449"/>
</kw>
<return>
<value>${conn_id}</value>
<status status="PASS" start="2026-04-13T02:57:52.786224" elapsed="0.000057"/>
</return>
<msg time="2026-04-13T02:57:52.786501" level="INFO">${connections} = 83</msg>
<var>${connections}</var>
<arg>${host}</arg>
<doc>Returns the connection of any host. Defaults to controller</doc>
<status status="PASS" start="2026-04-13T02:57:52.443556" elapsed="0.342981"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connections}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-13T02:57:52.786792" elapsed="0.000201"/>
</kw>
<kw name="Directory Should Exist" owner="SSHLibrary">
<msg time="2026-04-13T02:57:52.797825" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<arg>${WORKSPACE}/${BUNDLEFOLDER}/daexim</arg>
<doc>Fails if the given ``path`` does not point to an existing directory.</doc>
<status status="PASS" start="2026-04-13T02:57:52.787133" elapsed="0.012480"/>
</kw>
<kw name="Get Directory" owner="SSHLibrary">
<msg time="2026-04-13T02:57:52.824841" level="INFO">'/tmp/karaf-0.24.0/daexim/odl_backup_models.json' -&gt; '/tmp/Export10.30.170.156/odl_backup_models.json'</msg>
<msg time="2026-04-13T02:57:52.824928" level="INFO">'/tmp/karaf-0.24.0/daexim/odl_backup_operational.json' -&gt; '/tmp/Export10.30.170.156/odl_backup_operational.json'</msg>
<msg time="2026-04-13T02:57:52.824963" level="INFO">'/tmp/karaf-0.24.0/daexim/odl_backup_config.json' -&gt; '/tmp/Export10.30.170.156/odl_backup_config.json'</msg>
<arg>${WORKSPACE}/${BUNDLEFOLDER}/daexim</arg>
<arg>${new_dir}</arg>
<doc>Downloads a directory, including its content, from the remote machine to the local machine.</doc>
<status status="PASS" start="2026-04-13T02:57:52.800062" elapsed="0.024975"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:52.825291" elapsed="0.000366"/>
</kw>
<kw name="List Files In Directory" owner="OperatingSystem">
<msg time="2026-04-13T02:57:52.826032" level="INFO" html="true">Listing contents of directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:52.826147" level="INFO">3 files:
odl_backup_config.json
odl_backup_models.json
odl_backup_operational.json</msg>
<msg time="2026-04-13T02:57:52.826242" level="INFO">${output} = ['odl_backup_config.json', 'odl_backup_models.json', 'odl_backup_operational.json']</msg>
<var>${output}</var>
<arg>${new_dir}</arg>
<doc>Wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-13T02:57:52.825827" elapsed="0.000443"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.826759" level="INFO">['odl_backup_config.json', 'odl_backup_models.json', 'odl_backup_operational.json']</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:52.826427" elapsed="0.000380"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:57:52.827428" level="INFO" html="true">Getting file '&lt;a href="file:///tmp/Export10.30.170.156/odl_backup_config.json"&gt;/tmp/Export10.30.170.156/odl_backup_config.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:52.827620" level="INFO">${fl} = {"aaa-cert-mdsal:key-stores":{"id":"KeyStores:1","ssl-data":[{"bundle-name":"opendaylight","tls-protocols":"","odl-keystore":{"store-password":"5AHEJ7sg5yvn74BHdl3sKsButoYSv7IFunwcn/9FN7fJDf8j7AKIxOw7...</msg>
<var>${fl}</var>
<arg>${new_dir}/${EXP_DATA_FILE}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:57:52.826985" elapsed="0.000700"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.828481" level="INFO">{"aaa-cert-mdsal:key-stores":{"id":"KeyStores:1","ssl-data":[{"bundle-name":"opendaylight","tls-protocols":"","odl-keystore":{"store-password":"5AHEJ7sg5yvn74BHdl3sKsButoYSv7IFunwcn/9FN7fJDf8j7AKIxOw7bvA=","sign-alg":"SHA1WithRSAEncryption","validity":365,"alias":"controller","name":"ctl.jks","dname":"CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA","keystoreFile":"5AHEJ7sg5yvn74BHdl3sKljZHlNBxepq9UVvplUbDCmbzXbnqNyfc0D2mRtXS8605DgJkbHckr6kzFwBi6bdLunBdEOjqbmCiaOoJ2Ysgc5WH/YelOknGWty27ndIcygPzbooOjZ9I7mdKx55PRv5hX0yWvV41CnpBfCpCi1zYd8upW8UIkuFDz0cSlPfKe2x0CF/Q0/wx7VwLqhH2YDhJRqQsSlTWqZ7igaPPqYspg5JDbYlLxHYV3dfLLXH10xTIs3X0yFCgM7k41W97fR2sqXz2ZDU5bR51Oet489hHRYP0WyGSOkJ9qy46tvAoclN1KQCmYHRAHQqu03UeQHjkJCIotJlfLo1bX3358XOfmaC9MBptVdaEpjKmV/ZA+5uTJys5Hro1W0nxWWF2xqiboUSlurFwlLsKS7Sre58YydoLRnmCj/ee0aoYsP2KCPpmdiddxwC0DoRKhFCVfK22dLidfqE8EJ1iUMbGO0qAiTF+SwXLBE2GDtxF/sMRgZv0WjVi/K8Ye8LtkkaWJyiEOcebteHz8/P1lQFuycrAnZs9bgxHijz0uiOs2ut79VxisQhpD5iWRXQwyvFyzJv5/ypwCMK4DZw91tpOWJi2/e3wKVMJ9wgNrwA9RkiBjEUCsw7aUPcI8IkGm6x8mI77W8FmN9gD9lso+0SBlHvPlbZV4FRQaMnWkp6M2BKRhWfTR3EwPd4Xh3Z/SXTpUmBRRG7AhZsGZq1twe/y4Zk0JmzB4/KilwCVIyaez/MJbUT8TVQVI/1oHmUxk51QWvNCgq8rRCQ43dIh/XksPE00b6Urh3qeUcmFHl86vB4WCPyjkcdfeZEErr9YHnNoRmlU1ww0p0LQdV/kONje0u32NjROF5LI9iDBvgsrDhwHbRRiOKLbuy7bDZ28oHAhUhKByr/6YycHNkz7kWT6MRtfZQ0IKZCubX5si3UfGEQfw791dwcnmPI5ip+x2wNIfNsNiIi6stNNPhHeYRGyD+U5WMkleFNSwBjDJa4+NdHbOYBOphjTi6cygJRuyg16M8+av3PRHlJajcDw7yMH6jCbmS7sd6f5Ui3WMc079SK0N0H9DeoUdEYNks6FTzQhIn5VbM563Cob8ep4MdGZcINhIwLlEe1Yy8RzXGn9/UBOaKGgOX6aYr7yav2tT6ghFRRLZdf9JoqfNg9x67De25OChjonXx46NEZHGsHwkDmjXJdCPtSBs6eVtGjKsPmXwQi8j67+KSdXTgX1WWbMJmfmXg71SjYS4U83WvDTkBiXgRr5rPXP+mIijq8JUoRAeN8K7WHQ6TFJorSgogq5GqKvYj5BiL25Lg+zoZyFjizASoOESZjcVVEs03Qfe9wYAKoHsoUcGc7+ktoVBXP3jEK29fjytLOY1ZDeYM63SBLKUR6Y1ZVcU1zkLwgNC8+tW443UBfrCK7/W7TObeNBhIJqisulQn0cyiKUtSkYPC82hlDWEYp6Cd4nLj70hcO4F2j65XolF9u2mkazU6JolG4sno8mhw4FBrQT27Xb6d6jWbW9zug9GDKdFFSdqMJn/cAjJzWlNK/TiM+H7B+DfFmFWLvdcoCPNToRbx2ZO0PQX9GjN4vOekxZ7PcVtXr4UX9nyvvei2BtY/VPRgr/fQDsloHmNY/eHR40x3xPolOADo5e4X1xQ7wIrJWHiGyApUMCS1lvsYEL468XVplmq6gA3nldaWPhuJCKNrd6CobrafrNvOiICfg/TL3IoUQ3dzpMhJ/egbkT5/5LZrN019LbvZUqolKyE32eXMhzCVxwuPJxrexoOquJQ8y/7C6G3HgWg=","key-alg":"RSA","keysize":1024},"cipher-suites":[{"suiteName":""}],"trust-keystore":{"keystoreFile":"5AHEJ7sg5yvn74BHdl3sKljZHlNBxepq9UVvp70b7dvd0eJy300XbNkxGKmQugFXL1FQtzgOwqJraU38pFhjXw==","store-password":"5AHEJ7sg5yvn74BHdl3sKuJCqo51qaBawz8VlnYlif8VT3m2ixY56Ef+2KM=","name":"truststore.jks"}}]},"aaa-encrypt-service-config:aaa-encrypt-service-config":{"encrypt-type":"AES","encrypt-key-length":128,"password-length":12,"cipher-transforms":"AES/GCM/NoPadding","encrypt-key":"pqO7nsOXMyRk","encrypt-salt":"5AHEJ7sg5yvn74BHdl3sKg==","auth-tag-length":128,"encrypt-method":"PBKDF2WithHmacSHA1","encrypt-iteration-count":32768}}</msg>
<arg>${fl}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:52.827882" elapsed="0.000731"/>
</kw>
<arg>${host}</arg>
<doc>This keyword copies the daexim folder genereated in the controller to robot vm. This is done to editing if needed on the json files</doc>
<status status="PASS" start="2026-04-13T02:57:52.439914" elapsed="0.388856"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.829958" level="INFO">${export_file} = odl_backup_operational.json</msg>
<var>${export_file}</var>
<arg>'${store}' == 'operational'</arg>
<arg>${EXP_OPER_FILE}</arg>
<arg>${EXP_DATA_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:57:52.829080" elapsed="0.000935"/>
</kw>
<kw name="Join Path" owner="OperatingSystem">
<msg time="2026-04-13T02:57:52.830886" level="INFO">${file_path} = /tmp/Export10.30.170.156/odl_backup_operational.json</msg>
<var>${file_path}</var>
<arg>${EXP_DIR}${host}</arg>
<arg>${export_file}</arg>
<doc>Joins the given path part(s) to the given base path.</doc>
<status status="PASS" start="2026-04-13T02:57:52.830318" elapsed="0.000625"/>
</kw>
<return>
<value>${file_path}</value>
<status status="PASS" start="2026-04-13T02:57:52.831054" elapsed="0.000080"/>
</return>
<msg time="2026-04-13T02:57:52.831448" level="INFO">${file2} = /tmp/Export10.30.170.156/odl_backup_operational.json</msg>
<var>${file2}</var>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>operational</arg>
<arg>opendaylight-inventory</arg>
<doc>Schedules a export with exclude option. Returns the file that has the excluded export.</doc>
<status status="PASS" start="2026-04-13T02:57:44.806555" elapsed="8.024947"/>
</kw>
<kw name="Grep File" owner="OperatingSystem">
<msg time="2026-04-13T02:57:52.832336" level="INFO" html="true">Reading file '&lt;a href="file:///tmp/Export10.30.170.156/odl_backup_operational.json"&gt;/tmp/Export10.30.170.156/odl_backup_operational.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:52.832690" level="INFO">0 out of 1 lines matched.</msg>
<msg time="2026-04-13T02:57:52.832859" level="INFO">${lines2} = </msg>
<var>${lines2}</var>
<arg>${file2}</arg>
<arg>opendaylight-inventory:</arg>
<doc>Returns the lines of the specified file that match the ``pattern``.</doc>
<status status="PASS" start="2026-04-13T02:57:52.831841" elapsed="0.001059"/>
</kw>
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.833862" level="INFO">Length is 0.</msg>
<arg>${lines2}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-13T02:57:52.833126" elapsed="0.000842"/>
</kw>
<doc>schedule export with exclude option on a cluster</doc>
<tag>exclude export</tag>
<status status="PASS" start="2026-04-13T02:57:36.763978" elapsed="16.070277"/>
</test>
<test id="s1-s1-t6" name="Create Wildcard Exclude Export" line="66">
<kw name="Schedule Exclude Export" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.837908" level="INFO">${controller_index} = 1</msg>
<var>${controller_index}</var>
<arg>${controller_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:52.837345" elapsed="0.000611"/>
</kw>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:52.839139" level="INFO">${ip_address} = 10.30.170.156</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:52.838736" elapsed="0.000441"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-13T02:57:52.839255" elapsed="0.000103"/>
</return>
<msg time="2026-04-13T02:57:52.839501" level="INFO">${host} = 10.30.170.156</msg>
<var>${host}</var>
<arg>${controller_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-13T02:57:52.838261" elapsed="0.001266"/>
</kw>
<kw name="Schedule Export" owner="DaeximKeywords">
<if>
<branch type="IF" condition="${include}">
<kw name="Set Variable" owner="BuiltIn">
<var>${file}</var>
<arg>${EXPORT_INCLUDE_FILE}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:52.840859" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:52.840582" elapsed="0.000365"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.841691" level="INFO">${file} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export_exclude.json</msg>
<var>${file}</var>
<arg>${exclude}</arg>
<arg>${EXPORT_EXCLUDE_FILE}</arg>
<arg>${EXPORT_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:57:52.841194" elapsed="0.000536"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:52.840986" elapsed="0.000795"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:52.840550" elapsed="0.001261"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:57:52.842215" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export_exclude.json"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export_exclude.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:57:52.842450" level="INFO">${json} =  {
     "input": {
         "data-export-import:run-at": ${time},
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "${module}",
                 "data-...</msg>
<var>${json}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:57:52.841998" elapsed="0.000492"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.843301" level="INFO">${json} =  {
     "input": {
         "data-export-import:run-at": 500,
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "*",
                 "data-store": "con...</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-13T02:57:52.842713" elapsed="0.000632"/>
</kw>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.844618" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:52.844152" elapsed="0.000523"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.860756" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:52.860213" elapsed="0.000590"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:52.860889" elapsed="0.000056"/>
</return>
<msg time="2026-04-13T02:57:52.861134" 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-04-13T02:57:52.859671" elapsed="0.001500"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.865709" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:52.865252" elapsed="0.000531"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:52.869332" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:57:52.868681" elapsed="0.001568">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:57:52.865902" elapsed="0.004471">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:52.870657" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:52.870422" elapsed="0.000324"/>
</branch>
<status status="FAIL" start="2026-04-13T02:57:52.865868" elapsed="0.004913">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:57:52.871346" elapsed="0.000037"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:52.871491" elapsed="0.000027"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:57:52.861572" elapsed="0.010108">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:52.872118" elapsed="0.000028"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-13T02:57:52.858961" elapsed="0.013313">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:52.872526" elapsed="0.000032"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:52.872663" elapsed="0.000024"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:57:52.855670" elapsed="0.017138">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:52.844841" elapsed="0.028065"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:52.874319" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:52.874027" elapsed="0.000321"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:52.875144" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:52.879180" elapsed="0.000345"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.880592" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:52.879749" elapsed="0.000995"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:52.881988" level="INFO">${conn_id} = 84</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:52.880957" elapsed="0.001073"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:52.884090" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:52.884287" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:52.883566" elapsed="0.000817"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:52.885193" elapsed="0.000659"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:52.887820" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:53.212611" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:52 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:52.887450" elapsed="0.325346"/>
</kw>
<msg time="2026-04-13T02:57:53.212942" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:52.886771" elapsed="0.326383"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:52.882345" elapsed="0.330964"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:53.214034" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:57:53.237620" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:57:53.238132" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:57:53.238303" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:57:53.213651" elapsed="0.024744"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:53.239118" elapsed="0.000699"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:53.241548" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:53.240374" elapsed="0.001521"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:53.242787" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:53.242245" elapsed="0.000821"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:53.242190" elapsed="0.000940"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:53.243782" elapsed="0.000071"/>
</return>
<status status="PASS" start="2026-04-13T02:57:53.243261" elapsed="0.000779"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:53.243224" elapsed="0.000854"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:53.244127" elapsed="0.000020"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:53.248365" elapsed="0.000949"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:53.249734" elapsed="0.000680"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:53.250894" elapsed="0.000529"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:53.244576" elapsed="0.006996"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:52.877188" elapsed="0.374568"/>
</kw>
<msg time="2026-04-13T02:57:53.251841" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:52.876468" elapsed="0.375459"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:52.875954" elapsed="0.376091"/>
</kw>
<msg time="2026-04-13T02:57:53.252106" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:52.875444" elapsed="0.376728"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:53.256339" elapsed="0.000346"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:53.256838" elapsed="0.000158"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:53.257131" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:53.252593" elapsed="0.004689"/>
</kw>
<msg time="2026-04-13T02:57:53.257378" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:52.874554" elapsed="0.382850"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:53.257851" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:53.257581" elapsed="0.000312"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:53.257939" elapsed="0.000033"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:52.873575" elapsed="0.384496"/>
</kw>
<msg time="2026-04-13T02:57:53.258158" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:52.873076" elapsed="0.385279"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:53.259742" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:53.259449" elapsed="0.000388"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:53.260588" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:53.264644" elapsed="0.000343"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:53.266045" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:53.265191" elapsed="0.000984"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:53.267172" level="INFO">${conn_id} = 87</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:53.266384" elapsed="0.000829"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:53.269252" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:53.269483" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:53.268714" elapsed="0.000874"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:53.270428" elapsed="0.000667"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:53.273254" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:53.592290" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:53 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:53.272900" elapsed="0.319555"/>
</kw>
<msg time="2026-04-13T02:57:53.592601" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:53.272224" elapsed="0.320510"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:53.267545" elapsed="0.325340"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:53.593562" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:57:53.606095" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:57:53.606474" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:57:53.606678" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:57:53.593190" elapsed="0.013602"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:53.607486" elapsed="0.000589"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:53.609695" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:53.608578" elapsed="0.001408"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:53.610996" elapsed="0.000051"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:53.610480" elapsed="0.000794"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:53.610417" elapsed="0.000918"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:53.612046" elapsed="0.000078"/>
</return>
<status status="PASS" start="2026-04-13T02:57:53.611496" elapsed="0.000849"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:53.611460" elapsed="0.000946"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:53.612483" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:53.618122" elapsed="0.000927"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:53.619480" elapsed="0.000763"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:53.620605" elapsed="0.000563"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:53.613193" elapsed="0.008122"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:53.262549" elapsed="0.358926"/>
</kw>
<msg time="2026-04-13T02:57:53.621559" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:53.261875" elapsed="0.359810"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:53.261349" elapsed="0.360457"/>
</kw>
<msg time="2026-04-13T02:57:53.621867" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:53.260873" elapsed="0.361062"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:53.625946" 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-04-13T02:57:53.626664" elapsed="0.000222"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:53.627084" 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-04-13T02:57:53.622363" elapsed="0.004952"/>
</kw>
<msg time="2026-04-13T02:57:53.627512" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:53.260051" elapsed="0.367501"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:53.628255" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:53.627955" elapsed="0.000342"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:53.628343" elapsed="0.000035"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:53.259026" elapsed="0.369451"/>
</kw>
<msg time="2026-04-13T02:57:53.628564" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:57:53.258505" elapsed="0.370084"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:53.629662" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:53.629225" elapsed="0.000464"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:53.630423" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:53.633747" elapsed="0.000333"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:53.634843" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:53.634224" elapsed="0.000667"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:53.635529" level="INFO">${conn_id} = 90</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:53.635042" elapsed="0.000514"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:53.636883" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:53.637073" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:53.636244" elapsed="0.000860"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:53.637317" elapsed="0.000800"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:53.640191" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:53.958617" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:53 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:53.639656" elapsed="0.319221"/>
</kw>
<msg time="2026-04-13T02:57:53.959011" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:53.638361" elapsed="0.320797"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:53.635781" elapsed="0.323599"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:53.960042" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:57:53.972775" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:53.973216" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:57:53.973367" 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-04-13T02:57:53.959714" elapsed="0.013731"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:53.974050" elapsed="0.000799"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:53.975908" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:53.975230" 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-04-13T02:57:53.976423" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:53.976162" elapsed="0.000361"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:53.976111" elapsed="0.000460"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:53.976946" elapsed="0.000063"/>
</return>
<status status="PASS" start="2026-04-13T02:57:53.976722" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:53.976687" elapsed="0.000447"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:53.977209" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:53.996166" elapsed="0.000631"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:53.996978" elapsed="0.000197"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:53.997314" 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-04-13T02:57:53.977812" elapsed="0.019665"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:53.632697" elapsed="0.364879"/>
</kw>
<msg time="2026-04-13T02:57:53.997817" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:53.631781" elapsed="0.366111"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:53.631189" elapsed="0.366788"/>
</kw>
<msg time="2026-04-13T02:57:53.998023" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:53.630707" elapsed="0.367362"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:54.000811" elapsed="0.000331"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:54.001294" elapsed="0.000153"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:54.001582" 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-04-13T02:57:53.998382" elapsed="0.003697"/>
</kw>
<msg time="2026-04-13T02:57:54.002178" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:53.629891" elapsed="0.372314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.002669" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:57 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.002394" elapsed="0.000329"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:54.002771" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:57:54.002939" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:53.628834" elapsed="0.374131"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.003357" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:57 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.003110" elapsed="0.000313"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:54.003569" elapsed="0.000328"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:57:52.843679" elapsed="1.160282"/>
</kw>
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.009365" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:54.009061" elapsed="0.000331"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:54.009441" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:57:54.009597" 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-04-13T02:57:54.008723" elapsed="0.000899"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.024892" level="INFO">/rests/operations/data-export-import:schedule-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.024458" elapsed="0.000512"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.025496" level="INFO"> {
     "input": {
         "data-export-import:run-at": 500,
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "*",
                 "data-store": "config"
             }
         ]
     }
 }
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.025175" elapsed="0.000384"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.026205" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.025867" elapsed="0.000397"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.026786" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.026450" elapsed="0.000395"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:54.027926" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:54.027667" elapsed="0.000288"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:54.028300" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:54.028114" elapsed="0.000213"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:54.028476" elapsed="0.000248"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.029156" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.028882" elapsed="0.000322"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:54.029256" elapsed="0.000051"/>
</return>
<msg time="2026-04-13T02:57:54.029454" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:54.027106" elapsed="0.002375"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:54.056366" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 path_url=/rests/operations/data-export-import:schedule-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '241', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body= {
     "input": {
         "data-export-import:run-at": 500,
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "*",
                 "data-store": "config"
             }
         ]
     }
 }
 
 </msg>
<msg time="2026-04-13T02:57:54.056727" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '45'} 
 body={"data-export-import:output":{"result":true}} 
 </msg>
<msg time="2026-04-13T02:57:54.057039" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:54.032011" elapsed="0.025098"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:54.029574" elapsed="0.027664"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:54.057756" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:54.057313" elapsed="0.000614"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:54.029550" elapsed="0.028433"/>
</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-04-13T02:57:54.066444" level="INFO">{"data-export-import:output":{"result":true}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.060702" elapsed="0.005867"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:54.060140" elapsed="0.006554"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:54.060090" elapsed="0.006671"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.070032" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.067547" elapsed="0.002533"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:54.066908" elapsed="0.003208"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:54.066865" elapsed="0.003276"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.070766" 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-04-13T02:57:54.070321" elapsed="0.000472"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:54.071092" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:54.070865" elapsed="0.000285"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.071691" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:54.071317" elapsed="0.000401"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:54.071174" elapsed="0.000580"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:54.070847" elapsed="0.000929"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.072286" 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-04-13T02:57:54.071918" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:54.072594" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:54.072381" elapsed="0.000285"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.073203" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:54.072831" elapsed="0.000398"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:54.072690" elapsed="0.000656"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:54.072363" elapsed="0.001006"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:54.073517" elapsed="0.000373"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:54.074350" 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-04-13T02:57:54.074042" elapsed="0.000333"/>
</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-04-13T02:57:54.074513" elapsed="0.002225"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:54.058924" elapsed="0.017886"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:54.077001" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:54.076888" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:54.076869" elapsed="0.000203"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:54.079673" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:54.077204" elapsed="0.002498"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:54.079752" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:57:54.079920" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:54.020588" elapsed="0.059358"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:54.080015" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:57:54.080167" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:54.017052" elapsed="0.063140"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:54.080243" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:57:54.080391" level="INFO">${response_json} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_json}</var>
<arg>${SCHEDULE_EXPORT_URL}</arg>
<arg>${json}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:54.008256" elapsed="0.072160"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.080838" level="INFO">{
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.080565" elapsed="0.000317"/>
</kw>
<arg>${controller_index}</arg>
<arg>500</arg>
<arg>${TRUE}</arg>
<arg>${module}</arg>
<arg>${store}</arg>
<doc>Schedule Export job</doc>
<status status="PASS" start="2026-04-13T02:57:52.839893" elapsed="1.241047"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.088868" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:54.088517" elapsed="0.000380"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:54.088950" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:57:54.089105" 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-04-13T02:57:54.088180" elapsed="0.000950"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.102821" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.102456" elapsed="0.000434"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.103329" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.103044" elapsed="0.000332"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.103861" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.103573" elapsed="0.000339"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.104378" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.104064" elapsed="0.000370"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:54.105356" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:54.105123" elapsed="0.000260"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:54.105821" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:54.105526" elapsed="0.000322"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:54.105989" elapsed="0.000204"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.106591" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.106336" elapsed="0.000334"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:54.106720" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T02:57:54.106894" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:54.104669" elapsed="0.002251"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:54.118396" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:57:54.119215" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '373'} 
 body={"data-export-import:output":{"run-at":"2026-04-13T02:57:59Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:54Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:54Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:54Z","status":"scheduled"}]}} 
 </msg>
<msg time="2026-04-13T02:57:54.119541" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:54.109103" elapsed="0.010504"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:54.107001" elapsed="0.012756"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:54.120192" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:54.119839" elapsed="0.000506"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:54.106980" elapsed="0.013413"/>
</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-04-13T02:57:54.128250" level="INFO">{"data-export-import:output":{"run-at":"2026-04-13T02:57:59Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:54Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:54Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:54Z","status":"scheduled"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.122764" elapsed="0.005538"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:54.122258" elapsed="0.006079"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:54.122212" elapsed="0.006150"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.130837" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.128645" elapsed="0.002239"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:54.128420" elapsed="0.002500"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:54.128403" elapsed="0.002542"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.131528" 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-04-13T02:57:54.131111" elapsed="0.000445"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:54.131869" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:54.131644" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.132427" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:54.132119" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:54.131952" elapsed="0.000539"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:54.131610" elapsed="0.000903"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.133037" 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-04-13T02:57:54.132669" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:54.133350" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:54.133132" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.133894" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:54.133573" elapsed="0.000347"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:54.133432" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:54.133115" elapsed="0.000861"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:54.134115" elapsed="0.000348"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:54.134988" 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-04-13T02:57:54.134692" elapsed="0.000323"/>
</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-04-13T02:57:54.135156" elapsed="0.002228"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:54.121223" elapsed="0.016227"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:54.137648" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:54.137523" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:54.137504" elapsed="0.000217"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:54.140388" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:54.137850" elapsed="0.002566"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:54.140465" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:57:54.140642" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:54.099800" elapsed="0.040871"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:54.140737" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:57:54.140888" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:54.096905" elapsed="0.044009"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:54.140965" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:57:54.141115" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:54.086021" elapsed="0.055120"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.141543" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:59Z",
  "status": "scheduled"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:54.141288" elapsed="0.000302"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.142040" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:57:54.141742" elapsed="0.000324"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<msg time="2026-04-13T02:57:54.143073" level="FAIL">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:59Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</msg>
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="FAIL" start="2026-04-13T02:57:54.142672" elapsed="0.000480">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:59Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:57:54.143410" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:54.143238" elapsed="0.000247"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="NOT RUN" start="2026-04-13T02:57:54.143685" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:54.143509" elapsed="0.000279"/>
</branch>
<status status="NOT RUN" start="2026-04-13T02:57:54.143219" elapsed="0.000590"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="FAIL" start="2026-04-13T02:57:54.142297" elapsed="0.001620">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:59Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Verify export status is as expected</doc>
<status status="FAIL" start="2026-04-13T02:57:54.081613" elapsed="0.062415">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:57:54Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:57:59Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.158818" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:57:59.158283" elapsed="0.000581"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:57:59.158946" elapsed="0.000055"/>
</return>
<msg time="2026-04-13T02:57:59.159183" 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-04-13T02:57:59.157768" elapsed="0.001451"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.174258" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.173956" elapsed="0.000359"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.174782" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.174464" elapsed="0.000362"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.175222" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.174968" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.175684" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.175402" elapsed="0.000328"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:59.176603" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:57:59.176384" elapsed="0.000278"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:57:59.177039" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:57:59.176856" elapsed="0.000210"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:57:59.177204" elapsed="0.000206"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.177834" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.177550" elapsed="0.000329"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:57:59.177928" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T02:57:59.178107" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:57:59.175931" elapsed="0.002201"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:57:59.189399" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:57:59.190307" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '886'} 
 body={"data-export-import:output":{"status":"complete","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:59Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:59Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:59Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"}]}} 
 </msg>
<msg time="2026-04-13T02:57:59.190459" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:57:59.180348" elapsed="0.010148"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:59.178214" elapsed="0.012347"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:59.190829" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:59.190600" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:59.178193" elapsed="0.012840"/>
</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-04-13T02:57:59.196077" level="INFO">{"data-export-import:output":{"status":"complete","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:57:59Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:57:59Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:57:59Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.192494" elapsed="0.003657"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:59.192191" elapsed="0.004009"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:59.192164" elapsed="0.004078"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.199761" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.196626" elapsed="0.003219"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:59.196327" elapsed="0.003580"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:59.196302" elapsed="0.003651"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.200941" 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-04-13T02:57:59.200244" elapsed="0.000737"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:59.201402" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:59.201084" elapsed="0.000400"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.202179" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:59.201749" elapsed="0.000468"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:59.201518" elapsed="0.000749"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:59.201058" elapsed="0.001239"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.203045" 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-04-13T02:57:59.202496" elapsed="0.000588"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:57:59.203488" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:59.203183" elapsed="0.000556"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.204397" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:57:59.203978" elapsed="0.000455"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:59.203774" elapsed="0.000709"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:59.203157" elapsed="0.001356"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:59.204728" elapsed="0.000542"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:57:59.205754" 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-04-13T02:57:59.205440" 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-04-13T02:57:59.205923" elapsed="0.002223"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:57:59.191535" elapsed="0.016677"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:57:59.208399" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:59.208287" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:59.208268" elapsed="0.000200"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:57:59.211246" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:57:59.208601" elapsed="0.002695"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:57:59.211351" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:57:59.211525" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:57:59.171365" elapsed="0.040188"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:59.211682" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:57:59.211840" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:57:59.168432" elapsed="0.043435"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:57:59.211919" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:57:59.212068" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:57:59.154671" elapsed="0.057424"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.212529" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:57:59Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.170.138:2550",
    "status": "complete"
   },
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:57:59Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.170.156:2550",
    "status": "complete"
   },
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:57:59Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.171.185:2550",
    "status": "complete"
   }
  ],
  "status": "complete"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.212256" elapsed="0.000483"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.213269" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:57:59.212950" elapsed="0.000348"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:59.213890" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:57:59.214680" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:57:59.214340" elapsed="0.000399"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${config_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:59.215358" elapsed="0.000367"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${models_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:59.215869" elapsed="0.000338"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${operational_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:59.216349" elapsed="0.000345"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.217081" level="INFO">Found all Json Files</msg>
<arg>Found all Json Files</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.216869" elapsed="0.000255"/>
</kw>
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="PASS" start="2026-04-13T02:57:59.214928" elapsed="0.002251"/>
</kw>
<status status="PASS" start="2026-04-13T02:57:59.214765" elapsed="0.002444"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:59.214321" elapsed="0.002910"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:59.213523" elapsed="0.003753"/>
</kw>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Verify export status is as expected</doc>
<status status="PASS" start="2026-04-13T02:57:59.144896" elapsed="0.072434"/>
</kw>
<arg>10 sec</arg>
<arg>5 sec</arg>
<arg>Verify Export Status</arg>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-13T02:57:54.081094" elapsed="5.136284"/>
</kw>
<kw name="Verify Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.218230" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:57:59.217924" elapsed="0.000332"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:59.219172" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:59.218907" elapsed="0.000292"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:59.220403" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:59.224490" elapsed="0.000651"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.226179" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.225440" elapsed="0.000811"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:59.227031" level="INFO">${conn_id} = 93</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:59.226463" elapsed="0.000606"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.228527" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:59.228744" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:59.227927" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:59.229059" elapsed="0.000496"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:59.230978" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:59.580119" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:53 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:59.230079" elapsed="0.350224"/>
</kw>
<msg time="2026-04-13T02:57:59.580482" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:59.229731" elapsed="0.350834"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:59.227354" elapsed="0.353334"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:59.581149" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json'.</msg>
<msg time="2026-04-13T02:57:59.594472" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:59.594678" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 2 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<msg time="2026-04-13T02:57:59.594743" 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-04-13T02:57:59.580914" elapsed="0.013863"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:59.595012" elapsed="0.000358"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.596451" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.595809" elapsed="0.000741"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:59.597131" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:59.596774" elapsed="0.000477"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:59.596719" elapsed="0.000587"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:59.597722" elapsed="0.000068"/>
</return>
<status status="PASS" start="2026-04-13T02:57:59.597435" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:59.597400" elapsed="0.000530"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:59.598011" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:59.604402" elapsed="0.001059"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:59.605621" elapsed="0.000198"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:59.605958" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:59.598758" elapsed="0.007358"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:59.222836" elapsed="0.383375"/>
</kw>
<msg time="2026-04-13T02:57:59.606270" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:59.222040" elapsed="0.384288"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:59.221300" elapsed="0.385111"/>
</kw>
<msg time="2026-04-13T02:57:59.606454" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:59.220755" elapsed="0.385745"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:59.609167" 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-04-13T02:57:59.609649" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:59.609931" 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-04-13T02:57:59.606802" elapsed="0.003280"/>
</kw>
<msg time="2026-04-13T02:57:59.610177" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 2 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:59.219401" elapsed="0.390802"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.610655" level="INFO">-rw-rw-r-- 1 jenkins jenkins 2 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.610384" elapsed="0.000318"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:59.610748" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:57:59.610905" level="INFO">${cfg} = -rw-rw-r-- 1 jenkins jenkins 2 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<var>${cfg}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_DATA_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:59.218480" elapsed="0.392450"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.611317" level="INFO">-rw-rw-r-- 1 jenkins jenkins 2 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<arg>${cfg}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.611073" elapsed="0.000288"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${cfg}</arg>
<arg>.*${EXP_DATA_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:59.611498" elapsed="0.000352"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:57:59.612834" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:57:59.612538" elapsed="0.000324"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:59.613640" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:57:59.616736" elapsed="0.000379"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.617906" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.617257" elapsed="0.000698"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:57:59.618473" level="INFO">${conn_id} = 96</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:57:59.618101" elapsed="0.000399"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.619439" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:57:59.619517" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:57:59.619100" elapsed="0.000441"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:59.619708" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:57:59.621437" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:57:59.969787" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:59 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:57:59.620639" elapsed="0.349354"/>
</kw>
<msg time="2026-04-13T02:57:59.970176" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:59.620277" elapsed="0.349987"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:57:59.618718" elapsed="0.351667"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:57:59.970953" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json'.</msg>
<msg time="2026-04-13T02:57:59.984331" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:57:59.984517" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<msg time="2026-04-13T02:57:59.984578" 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-04-13T02:57:59.970690" elapsed="0.013920"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:59.984875" elapsed="0.000367"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.985934" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.985493" elapsed="0.000499"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:59.986302" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:57:59.986109" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:59.986074" elapsed="0.000335"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:57:59.986649" elapsed="0.000043"/>
</return>
<status status="PASS" start="2026-04-13T02:57:59.986482" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-04-13T02:57:59.986461" elapsed="0.000312"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:57:59.986821" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:59.990981" 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-04-13T02:57:59.991798" elapsed="0.000229"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:59.992215" elapsed="0.000136"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:59.987254" elapsed="0.005170"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:57:59.615579" elapsed="0.376974"/>
</kw>
<msg time="2026-04-13T02:57:59.992653" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:59.614992" elapsed="0.377741"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:57:59.614386" elapsed="0.378543"/>
</kw>
<msg time="2026-04-13T02:57:59.992987" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:59.613911" elapsed="0.379161"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:57:59.996939" 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-04-13T02:57:59.997611" elapsed="0.000167"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:57:59.997911" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:57:59.993509" elapsed="0.004548"/>
</kw>
<msg time="2026-04-13T02:57:59.998151" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:57:59.613081" elapsed="0.385095"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.998601" level="INFO">-rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.998354" elapsed="0.000307"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:57:59.998706" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:57:59.998862" level="INFO">${mdl} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<var>${mdl}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${MODELS_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:57:59.612071" elapsed="0.386816"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:57:59.999271" level="INFO">-rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<arg>${mdl}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:57:59.999031" elapsed="0.000284"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${mdl}</arg>
<arg>.*${MODELS_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:57:59.999449" elapsed="0.000352"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:00.000709" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:00.000423" elapsed="0.000312"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:00.001486" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:00.004308" elapsed="0.000254"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.005255" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:00.004863" elapsed="0.000439"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:00.005827" level="INFO">${conn_id} = 99</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:00.005445" elapsed="0.000408"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.006959" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:00.007038" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:00.006443" elapsed="0.000619"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:00.007249" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:00.008926" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:00.380261" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:57:59 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:00.008170" elapsed="0.372287"/>
</kw>
<msg time="2026-04-13T02:58:00.380652" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:00.007828" elapsed="0.372913"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:00.006054" elapsed="0.374801"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:00.381340" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json'.</msg>
<msg time="2026-04-13T02:58:00.394614" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:00.394924" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<msg time="2026-04-13T02:58:00.395027" 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-04-13T02:58:00.381079" elapsed="0.014000"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:00.395425" elapsed="0.000522"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.396966" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:00.396313" elapsed="0.000750"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:00.397663" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:00.397286" elapsed="0.000494"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:00.397185" elapsed="0.000649"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:00.398191" elapsed="0.000061"/>
</return>
<status status="PASS" start="2026-04-13T02:58:00.397955" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:00.397920" elapsed="0.000462"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:00.398456" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:00.403326" 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-04-13T02:58:00.403881" elapsed="0.000165"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:00.404179" elapsed="0.000098"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:00.399158" elapsed="0.005171"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:00.003296" elapsed="0.401125"/>
</kw>
<msg time="2026-04-13T02:58:00.404476" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:00.002758" elapsed="0.401770"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:00.002231" elapsed="0.402377"/>
</kw>
<msg time="2026-04-13T02:58:00.404680" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:00.001765" elapsed="0.402963"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:00.407381" elapsed="0.000334"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:00.407866" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:00.408181" 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-04-13T02:58:00.405004" elapsed="0.003452"/>
</kw>
<msg time="2026-04-13T02:58:00.408578" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:00.000932" elapsed="0.407679"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.409071" level="INFO">-rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:00.408816" elapsed="0.000300"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:00.409161" elapsed="0.000054"/>
</return>
<msg time="2026-04-13T02:58:00.409344" level="INFO">${opr} = -rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<var>${opr}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_OPER_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:00.000020" elapsed="0.409349"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.409825" level="INFO">-rw-rw-r-- 1 jenkins jenkins 34625 Apr 13 02:57 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<arg>${opr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:00.409522" elapsed="0.000349"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${opr}</arg>
<arg>.*${EXP_OPER_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:00.410012" elapsed="0.000419"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the backedup files are present in the controller</doc>
<status status="PASS" start="2026-04-13T02:57:59.217596" elapsed="1.192908"/>
</kw>
<kw name="Copy Export Directory To Test VM" owner="DaeximKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.411433" level="INFO">${new_dir} = /tmp/Export10.30.170.156</msg>
<var>${new_dir}</var>
<arg>${EXP_DIR}${host}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:00.411107" elapsed="0.000352"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="Directory Should Exist" owner="OperatingSystem">
<msg time="2026-04-13T02:58:00.412118" level="INFO" html="true">Directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;' exists.</msg>
<arg>${new_dir}</arg>
<doc>Fails unless the given path points to an existing directory.</doc>
<status status="PASS" start="2026-04-13T02:58:00.411944" elapsed="0.000225"/>
</kw>
<msg time="2026-04-13T02:58:00.412256" level="INFO">${directory_exist} = True</msg>
<var>${directory_exist}</var>
<arg>OperatingSystem.Directory Should Exist</arg>
<arg>${new_dir}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-13T02:58:00.411605" elapsed="0.000683"/>
</kw>
<if>
<branch type="IF" condition="${directory_exist}">
<kw name="Cleanup Directory" owner="DaeximKeywords">
<kw name="Empty Directory" owner="OperatingSystem">
<msg time="2026-04-13T02:58:00.413324" level="INFO" html="true">Listing contents of directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:00.413547" level="INFO" html="true">Emptied directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<arg>${dir}</arg>
<doc>Deletes all the content from the given directory.</doc>
<status status="PASS" start="2026-04-13T02:58:00.413133" elapsed="0.000467"/>
</kw>
<kw name="Remove Directory" owner="OperatingSystem">
<msg time="2026-04-13T02:58:00.413929" level="INFO" html="true">Listing contents of directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:00.413993" level="INFO" html="true">Directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;' is empty.</msg>
<msg time="2026-04-13T02:58:00.414072" level="INFO" html="true">Removed directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<arg>${dir}</arg>
<doc>Removes the directory pointed to by the given ``path``.</doc>
<status status="PASS" start="2026-04-13T02:58:00.413772" elapsed="0.000347"/>
</kw>
<arg>${new_dir}</arg>
<doc>Cleans up the given directory if it exists</doc>
<status status="PASS" start="2026-04-13T02:58:00.412576" elapsed="0.001599"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:00.412370" elapsed="0.001837"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:00.412350" elapsed="0.001882"/>
</if>
<kw name="Return ConnnectionID" owner="DaeximKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:00.415299" level="INFO">${conn_id} = 102</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:00.414924" elapsed="0.000402"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.416329" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:00.416425" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:00.415962" elapsed="0.000490"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:00.416599" elapsed="0.000356"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:00.417853" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:00.729815" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:00 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:00.417502" elapsed="0.312468"/>
</kw>
<msg time="2026-04-13T02:58:00.730146" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:00.417112" elapsed="0.313120"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:00.415530" elapsed="0.314815"/>
</kw>
<return>
<value>${conn_id}</value>
<status status="PASS" start="2026-04-13T02:58:00.730408" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T02:58:00.730619" level="INFO">${connections} = 102</msg>
<var>${connections}</var>
<arg>${host}</arg>
<doc>Returns the connection of any host. Defaults to controller</doc>
<status status="PASS" start="2026-04-13T02:58:00.414410" elapsed="0.316251"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connections}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-13T02:58:00.730864" elapsed="0.000183"/>
</kw>
<kw name="Directory Should Exist" owner="SSHLibrary">
<msg time="2026-04-13T02:58:00.739842" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<arg>${WORKSPACE}/${BUNDLEFOLDER}/daexim</arg>
<doc>Fails if the given ``path`` does not point to an existing directory.</doc>
<status status="PASS" start="2026-04-13T02:58:00.731186" elapsed="0.010276"/>
</kw>
<kw name="Get Directory" owner="SSHLibrary">
<msg time="2026-04-13T02:58:00.765393" level="INFO">'/tmp/karaf-0.24.0/daexim/odl_backup_models.json' -&gt; '/tmp/Export10.30.170.156/odl_backup_models.json'</msg>
<msg time="2026-04-13T02:58:00.765475" level="INFO">'/tmp/karaf-0.24.0/daexim/odl_backup_operational.json' -&gt; '/tmp/Export10.30.170.156/odl_backup_operational.json'</msg>
<msg time="2026-04-13T02:58:00.765513" level="INFO">'/tmp/karaf-0.24.0/daexim/odl_backup_config.json' -&gt; '/tmp/Export10.30.170.156/odl_backup_config.json'</msg>
<arg>${WORKSPACE}/${BUNDLEFOLDER}/daexim</arg>
<arg>${new_dir}</arg>
<doc>Downloads a directory, including its content, from the remote machine to the local machine.</doc>
<status status="PASS" start="2026-04-13T02:58:00.741712" elapsed="0.023873"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:00.765887" elapsed="0.000390"/>
</kw>
<kw name="List Files In Directory" owner="OperatingSystem">
<msg time="2026-04-13T02:58:00.766743" level="INFO" html="true">Listing contents of directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:00.766874" level="INFO">3 files:
odl_backup_config.json
odl_backup_models.json
odl_backup_operational.json</msg>
<msg time="2026-04-13T02:58:00.766999" level="INFO">${output} = ['odl_backup_config.json', 'odl_backup_models.json', 'odl_backup_operational.json']</msg>
<var>${output}</var>
<arg>${new_dir}</arg>
<doc>Wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-13T02:58:00.766486" elapsed="0.000547"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.767671" level="INFO">['odl_backup_config.json', 'odl_backup_models.json', 'odl_backup_operational.json']</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:00.767239" elapsed="0.000500"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:58:00.768183" level="INFO" html="true">Getting file '&lt;a href="file:///tmp/Export10.30.170.156/odl_backup_config.json"&gt;/tmp/Export10.30.170.156/odl_backup_config.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:00.768370" level="INFO">${fl} = {}</msg>
<var>${fl}</var>
<arg>${new_dir}/${EXP_DATA_FILE}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:58:00.767940" elapsed="0.000465"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.768986" level="INFO">{}</msg>
<arg>${fl}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:00.768601" elapsed="0.000447"/>
</kw>
<arg>${host}</arg>
<doc>This keyword copies the daexim folder genereated in the controller to robot vm. This is done to editing if needed on the json files</doc>
<status status="PASS" start="2026-04-13T02:58:00.410793" elapsed="0.358339"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.770005" level="INFO">${export_file} = odl_backup_config.json</msg>
<var>${export_file}</var>
<arg>'${store}' == 'operational'</arg>
<arg>${EXP_OPER_FILE}</arg>
<arg>${EXP_DATA_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:00.769386" elapsed="0.000657"/>
</kw>
<kw name="Join Path" owner="OperatingSystem">
<msg time="2026-04-13T02:58:00.770745" level="INFO">${file_path} = /tmp/Export10.30.170.156/odl_backup_config.json</msg>
<var>${file_path}</var>
<arg>${EXP_DIR}${host}</arg>
<arg>${export_file}</arg>
<doc>Joins the given path part(s) to the given base path.</doc>
<status status="PASS" start="2026-04-13T02:58:00.770250" elapsed="0.000545"/>
</kw>
<return>
<value>${file_path}</value>
<status status="PASS" start="2026-04-13T02:58:00.770877" elapsed="0.000056"/>
</return>
<msg time="2026-04-13T02:58:00.771123" level="INFO">${file1} = /tmp/Export10.30.170.156/odl_backup_config.json</msg>
<var>${file1}</var>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>config</arg>
<arg>*</arg>
<doc>Schedules a export with exclude option. Returns the file that has the excluded export.</doc>
<status status="PASS" start="2026-04-13T02:57:52.836296" elapsed="7.934864"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:58:00.771576" level="INFO" html="true">Getting file '&lt;a href="file:///tmp/Export10.30.170.156/odl_backup_config.json"&gt;/tmp/Export10.30.170.156/odl_backup_config.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:00.771770" level="INFO">${lines1} = {}</msg>
<var>${lines1}</var>
<arg>${file1}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:58:00.771375" elapsed="0.000437"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${lines1}</arg>
<arg>{}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-13T02:58:00.772012" elapsed="0.000425"/>
</kw>
<kw name="Schedule Exclude Export" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.776004" level="INFO">${controller_index} = 1</msg>
<var>${controller_index}</var>
<arg>${controller_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:00.775528" elapsed="0.000514"/>
</kw>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:00.777153" level="INFO">${ip_address} = 10.30.170.156</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:00.776772" elapsed="0.000418"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-13T02:58:00.777259" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T02:58:00.777521" level="INFO">${host} = 10.30.170.156</msg>
<var>${host}</var>
<arg>${controller_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-13T02:58:00.776319" elapsed="0.001238"/>
</kw>
<kw name="Schedule Export" owner="DaeximKeywords">
<if>
<branch type="IF" condition="${include}">
<kw name="Set Variable" owner="BuiltIn">
<var>${file}</var>
<arg>${EXPORT_INCLUDE_FILE}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:00.778846" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:00.778590" elapsed="0.000317"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.779412" level="INFO">${file} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export_exclude.json</msg>
<var>${file}</var>
<arg>${exclude}</arg>
<arg>${EXPORT_EXCLUDE_FILE}</arg>
<arg>${EXPORT_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:00.779070" elapsed="0.000369"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:00.778933" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:00.778569" elapsed="0.000933"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:58:00.779782" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export_exclude.json"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export_exclude.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:00.779913" level="INFO">${json} =  {
     "input": {
         "data-export-import:run-at": ${time},
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "${module}",
                 "data-...</msg>
<var>${json}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:58:00.779645" elapsed="0.000295"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.780461" level="INFO">${json} =  {
     "input": {
         "data-export-import:run-at": 500,
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "*",
                 "data-store": "ope...</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-13T02:58:00.780080" elapsed="0.000409"/>
</kw>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.781305" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:00.781005" elapsed="0.000326"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.792783" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:00.792470" elapsed="0.000340"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:00.792856" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:00.793004" 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-04-13T02:58:00.792143" elapsed="0.000885"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.795851" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:00.795589" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:00.798460" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:58:00.797984" elapsed="0.001046">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:58:00.795964" elapsed="0.003148">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:00.799280" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:00.799144" elapsed="0.000197"/>
</branch>
<status status="FAIL" start="2026-04-13T02:58:00.795945" elapsed="0.003419">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:58:00.799728" elapsed="0.000026"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:00.799802" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:58:00.793281" elapsed="0.006632">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:00.799985" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-13T02:58:00.791777" elapsed="0.008321">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:00.800279" elapsed="0.000022"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:00.800356" elapsed="0.000015"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:58:00.789623" elapsed="0.010836">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:00.781493" elapsed="0.019028"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:00.801813" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:00.801529" elapsed="0.000311"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:00.802584" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:00.806588" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.807956" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:00.807122" elapsed="0.000966"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:00.809089" level="INFO">${conn_id} = 103</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:00.808295" elapsed="0.000834"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:00.811237" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:00.811432" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:00.810752" elapsed="0.000776"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:00.812321" elapsed="0.000658"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:00.815013" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:01.145661" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:00 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:00.814689" elapsed="0.331137"/>
</kw>
<msg time="2026-04-13T02:58:01.145975" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:00.814023" elapsed="0.332063"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:00.809585" elapsed="0.336658"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:01.146958" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:01.169968" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:01.170374" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:01.170545" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:01.146557" elapsed="0.024134"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:01.171341" elapsed="0.000606"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.173943" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.172493" elapsed="0.001761"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:01.175119" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:01.174599" elapsed="0.000898"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:01.174541" elapsed="0.001024"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:01.176242" elapsed="0.000072"/>
</return>
<status status="PASS" start="2026-04-13T02:58:01.175762" elapsed="0.000792"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:01.175722" elapsed="0.000897"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:01.176750" elapsed="0.000036"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.184774" elapsed="0.001634"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:01.186689" elapsed="0.000449"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:01.187385" elapsed="0.000357"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:01.177472" elapsed="0.010374"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:00.804526" elapsed="0.383431"/>
</kw>
<msg time="2026-04-13T02:58:01.188015" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:00.803863" elapsed="0.384210"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:00.803334" elapsed="0.384820"/>
</kw>
<msg time="2026-04-13T02:58:01.188195" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:00.802867" elapsed="0.385374"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.191141" 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-04-13T02:58:01.191606" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:01.191901" 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-04-13T02:58:01.188517" elapsed="0.003530"/>
</kw>
<msg time="2026-04-13T02:58:01.192141" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:00.802038" elapsed="0.390128"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.192578" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.192331" elapsed="0.000287"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:01.192676" elapsed="0.000029"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:00.801128" elapsed="0.391674"/>
</kw>
<msg time="2026-04-13T02:58:01.192890" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:00.800719" elapsed="0.392196"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:01.194241" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:01.193912" elapsed="0.000356"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:01.195121" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:01.199090" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.200735" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.199715" elapsed="0.001152"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:01.201881" level="INFO">${conn_id} = 106</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:01.201076" elapsed="0.000845"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.203888" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:01.204076" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:01.203362" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.204975" elapsed="0.000636"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:01.207383" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:01.537451" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:01 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:01.207063" elapsed="0.330669"/>
</kw>
<msg time="2026-04-13T02:58:01.537916" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.206423" elapsed="0.331645"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:01.202217" elapsed="0.336066"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:01.539259" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:01.552760" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:01.553373" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:01.553485" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:01.538730" elapsed="0.015038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:01.554489" elapsed="0.000809"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.556767" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.555747" elapsed="0.001211"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:01.557893" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:01.557269" elapsed="0.000797"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:01.557230" elapsed="0.000874"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:01.558604" elapsed="0.000068"/>
</return>
<status status="PASS" start="2026-04-13T02:58:01.558256" elapsed="0.000564"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:01.558161" elapsed="0.000697"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:01.559006" elapsed="0.000023"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.563943" elapsed="0.000939"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:01.565272" elapsed="0.000792"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:01.566456" elapsed="0.000776"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:01.559469" elapsed="0.007913"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:01.197036" elapsed="0.370511"/>
</kw>
<msg time="2026-04-13T02:58:01.567742" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.196376" elapsed="0.371455"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:01.195869" elapsed="0.372093"/>
</kw>
<msg time="2026-04-13T02:58:01.568032" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.195384" elapsed="0.372717"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.571730" elapsed="0.000346"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:01.572229" elapsed="0.000160"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:01.572527" 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-04-13T02:58:01.568567" elapsed="0.004144"/>
</kw>
<msg time="2026-04-13T02:58:01.572811" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:01.194506" elapsed="0.378331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.573311" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.573031" elapsed="0.000327"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:01.573408" elapsed="0.000036"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:01.193479" elapsed="0.380064"/>
</kw>
<msg time="2026-04-13T02:58:01.573910" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:01.193068" elapsed="0.380872"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:01.574890" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:01.574592" elapsed="0.000325"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:01.575694" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:01.579052" elapsed="0.000272"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.580086" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.579461" elapsed="0.000673"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:01.580745" 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-04-13T02:58:01.580279" elapsed="0.000493"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.582122" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:01.582288" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:01.581443" elapsed="0.000870"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.582519" elapsed="0.000818"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:01.585525" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:01.897047" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:01 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:01.585008" elapsed="0.312260"/>
</kw>
<msg time="2026-04-13T02:58:01.897396" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.583675" elapsed="0.313854"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:01.580979" elapsed="0.316787"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:01.898363" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:58:01.910711" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:01.910974" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:58:01.911079" 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-04-13T02:58:01.898054" elapsed="0.013079"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:01.911496" elapsed="0.000538"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.913193" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.912411" elapsed="0.000881"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:01.913869" elapsed="0.000049"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:01.913475" elapsed="0.000521"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:01.913423" elapsed="0.000629"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:01.914433" elapsed="0.000070"/>
</return>
<status status="PASS" start="2026-04-13T02:58:01.914179" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:01.914141" elapsed="0.000544"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:01.914776" elapsed="0.000037"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.928553" 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-04-13T02:58:01.929235" elapsed="0.000164"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:01.929535" elapsed="0.000116"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:01.915499" elapsed="0.014208"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:01.577970" elapsed="0.351864"/>
</kw>
<msg time="2026-04-13T02:58:01.929898" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.576982" elapsed="0.352974"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:01.576449" elapsed="0.353588"/>
</kw>
<msg time="2026-04-13T02:58:01.930083" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.575967" elapsed="0.354162"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.932921" elapsed="0.000313"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:01.933384" elapsed="0.000142"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:01.933675" 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-04-13T02:58:01.930412" elapsed="0.003482"/>
</kw>
<msg time="2026-04-13T02:58:01.934008" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:01.575121" elapsed="0.358976"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.934537" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.934277" elapsed="0.000311"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:01.934649" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:01.934809" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:01.574176" elapsed="0.360659"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.935226" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.934981" elapsed="0.000296"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:01.935412" elapsed="0.000574"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:58:00.780699" elapsed="1.155350"/>
</kw>
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.941314" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:01.941007" elapsed="0.000334"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:01.941386" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:01.941533" 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-04-13T02:58:01.940672" elapsed="0.000885"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.955477" level="INFO">/rests/operations/data-export-import:schedule-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.955122" elapsed="0.000421"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.956117" level="INFO"> {
     "input": {
         "data-export-import:run-at": 500,
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "*",
                 "data-store": "operational"
             }
         ]
     }
 }
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.955775" elapsed="0.000406"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.956923" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.956340" elapsed="0.000636"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.957412" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.957128" elapsed="0.000349"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:01.958568" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:58:01.958308" elapsed="0.000297"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:58:01.959064" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:58:01.958820" elapsed="0.000282"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:01.959301" elapsed="0.000263"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.960036" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.959736" elapsed="0.000349"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:58:01.960132" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:01.960303" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:58:01.957766" elapsed="0.002564"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:01.978859" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 path_url=/rests/operations/data-export-import:schedule-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '246', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body= {
     "input": {
         "data-export-import:run-at": 500,
         "data-export-import:excluded-modules" : [
             {
                 "module-name": "*",
                 "data-store": "operational"
             }
         ]
     }
 }
 
 </msg>
<msg time="2026-04-13T02:58:01.979062" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '45'} 
 body={"data-export-import:output":{"result":true}} 
 </msg>
<msg time="2026-04-13T02:58:01.979274" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:58:01.962966" elapsed="0.016359"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:01.960497" elapsed="0.018918"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:01.979785" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:01.979469" elapsed="0.000430"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:01.960472" elapsed="0.019462"/>
</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-04-13T02:58:01.986142" level="INFO">{"data-export-import:output":{"result":true}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.981910" elapsed="0.004321"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:01.981438" elapsed="0.004860"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:01.981401" elapsed="0.004946"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.990834" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:01.986906" elapsed="0.003995"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:01.986456" elapsed="0.004495"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:01.986423" elapsed="0.004566"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.992012" 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-04-13T02:58:01.991283" elapsed="0.000770"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:01.992600" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:01.992174" elapsed="0.000564"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.993571" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:01.993028" elapsed="0.000592"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:01.992785" elapsed="0.000931"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:01.992139" elapsed="0.001620"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.994585" 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-04-13T02:58:01.994058" elapsed="0.000555"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:01.995020" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:01.994721" elapsed="0.000376"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:01.995675" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:01.995294" elapsed="0.000417"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:01.995130" elapsed="0.000629"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:01.994696" elapsed="0.001093"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:01.995983" elapsed="0.000401"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:01.996940" 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-04-13T02:58:01.996540" elapsed="0.000435"/>
</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-04-13T02:58:01.997169" elapsed="0.002832"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:58:01.980623" elapsed="0.019453"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:02.000307" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:02.000184" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:02.000157" elapsed="0.000268"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:58:02.003518" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:58:02.000590" elapsed="0.002965"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:58:02.003621" elapsed="0.000057"/>
</return>
<msg time="2026-04-13T02:58:02.003869" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:58:01.951437" elapsed="0.052459"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:02.003971" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:58:02.004174" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:58:01.948940" elapsed="0.055268"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:02.004277" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:02.004475" level="INFO">${response_json} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_json}</var>
<arg>${SCHEDULE_EXPORT_URL}</arg>
<arg>${json}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:01.940216" elapsed="0.064293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.005048" level="INFO">{
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:02.004705" elapsed="0.000405"/>
</kw>
<arg>${controller_index}</arg>
<arg>500</arg>
<arg>${TRUE}</arg>
<arg>${module}</arg>
<arg>${store}</arg>
<doc>Schedule Export job</doc>
<status status="PASS" start="2026-04-13T02:58:00.777942" elapsed="1.227246"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.015848" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:02.015427" elapsed="0.000462"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:02.015968" elapsed="0.000038"/>
</return>
<msg time="2026-04-13T02:58:02.016147" 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-04-13T02:58:02.015011" elapsed="0.001171"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.033966" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:02.033486" elapsed="0.001029"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.036954" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:02.035488" elapsed="0.001834"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.039707" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:02.038223" elapsed="0.001763"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.042498" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:02.040717" elapsed="0.001958"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:02.044079" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:58:02.043785" elapsed="0.000333"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:58:02.044974" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:58:02.044341" elapsed="0.000678"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:02.045223" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.046125" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:02.045740" elapsed="0.000448"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:58:02.046254" elapsed="0.000055"/>
</return>
<msg time="2026-04-13T02:58:02.046497" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:58:02.042980" elapsed="0.003551"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:02.061352" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:02.062045" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '373'} 
 body={"data-export-import:output":{"run-at":"2026-04-13T02:58:06Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:01Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:01Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:01Z","status":"scheduled"}]}} 
 </msg>
<msg time="2026-04-13T02:58:02.062279" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:58:02.051814" elapsed="0.010505"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:02.046668" elapsed="0.015717"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:02.062653" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:02.062425" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:02.046615" elapsed="0.016167"/>
</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-04-13T02:58:02.069807" level="INFO">{"data-export-import:output":{"run-at":"2026-04-13T02:58:06Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:01Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:01Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:01Z","status":"scheduled"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:02.064224" elapsed="0.005823"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:02.063927" elapsed="0.006285"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:02.063900" elapsed="0.006420"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.073442" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:02.070948" elapsed="0.002542"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:02.070449" elapsed="0.003076"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:02.070422" elapsed="0.003128"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.074862" 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-04-13T02:58:02.073728" elapsed="0.001164"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:02.075525" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:02.075162" elapsed="0.000422"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.076077" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:02.075770" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:02.075607" elapsed="0.000533"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:02.075108" elapsed="0.001053"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.076732" 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-04-13T02:58:02.076313" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:02.077100" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:02.076832" elapsed="0.000654"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.078280" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:02.077682" elapsed="0.000705"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:02.077516" elapsed="0.000910"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:02.076814" elapsed="0.001633"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:02.078801" elapsed="0.000406"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:02.079680" 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-04-13T02:58:02.079364" 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-04-13T02:58:02.079849" elapsed="0.002292"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:58:02.063277" elapsed="0.018931"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:02.082417" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:02.082303" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:02.082278" elapsed="0.000211"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:58:02.085749" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:58:02.082786" elapsed="0.002993"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:58:02.085830" elapsed="0.000092"/>
</return>
<msg time="2026-04-13T02:58:02.086057" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:58:02.029693" elapsed="0.056389"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:02.086193" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:02.086346" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:58:02.026170" elapsed="0.060201"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:02.086422" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:58:02.086570" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:02.011967" elapsed="0.074628"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.087018" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:58:06Z",
  "status": "scheduled"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:02.086761" elapsed="0.000307"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.087560" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:58:02.087206" elapsed="0.000382"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<msg time="2026-04-13T02:58:02.088582" level="FAIL">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:58:06Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</msg>
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="FAIL" start="2026-04-13T02:58:02.088187" elapsed="0.000492">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:58:06Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:58:02.088944" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:02.088766" elapsed="0.000236"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="NOT RUN" start="2026-04-13T02:58:02.089187" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:02.089026" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-13T02:58:02.088747" elapsed="0.000515"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="FAIL" start="2026-04-13T02:58:02.087832" elapsed="0.001539">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:58:06Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Verify export status is as expected</doc>
<status status="FAIL" start="2026-04-13T02:58:02.006100" elapsed="0.083383">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:01Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:58:06Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.102731" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:07.102288" elapsed="0.000477"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:07.102828" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T02:58:07.103025" 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-04-13T02:58:07.101883" elapsed="0.001178"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.115755" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.115473" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.116180" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.115940" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.116645" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.116356" elapsed="0.000335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.117070" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.116829" elapsed="0.000285"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:07.117914" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:58:07.117713" elapsed="0.000227"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:58:07.118250" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:58:07.118078" elapsed="0.000197"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:07.118409" elapsed="0.000196"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.119022" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.118766" elapsed="0.000300"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:58:07.119109" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:07.119266" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:58:07.117302" elapsed="0.001988"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:07.130660" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01tk2unt9tcmkk1lldz25e2zzkq0.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:07.131539" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '886'} 
 body={"data-export-import:output":{"status":"complete","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:06Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:06Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:06Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"}]}} 
 </msg>
<msg time="2026-04-13T02:58:07.131704" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:58:07.121366" elapsed="0.010376"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:07.119368" elapsed="0.012437"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:07.132036" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:07.131840" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:07.119347" elapsed="0.012811"/>
</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-04-13T02:58:07.137125" level="INFO">{"data-export-import:output":{"status":"complete","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:06Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:06Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:06Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.133591" elapsed="0.003617"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:07.133301" elapsed="0.003957"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:07.133275" elapsed="0.004017"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.140763" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.137690" elapsed="0.003118"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:07.137373" elapsed="0.003470"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:07.137349" elapsed="0.003517"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.141414" 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-04-13T02:58:07.141020" elapsed="0.000459"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:07.141790" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:07.141553" elapsed="0.000294"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.142334" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:07.142030" elapsed="0.000330"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:07.141871" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:07.141535" elapsed="0.000881"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.142942" 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-04-13T02:58:07.142555" elapsed="0.000413"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:07.143251" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:07.143037" elapsed="0.000271"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.143783" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:07.143471" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:07.143331" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:07.143019" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.144002" elapsed="0.000347"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:07.144814" 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-04-13T02:58:07.144510" elapsed="0.000330"/>
</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-04-13T02:58:07.144977" elapsed="0.002234"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:58:07.132684" elapsed="0.014590"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:07.147454" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:07.147348" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:07.147329" elapsed="0.000190"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:58:07.150250" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:58:07.147662" elapsed="0.002616"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:58:07.150327" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:07.150483" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:58:07.112925" elapsed="0.037584"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:07.150575" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:58:07.150739" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:58:07.110433" elapsed="0.040332"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:07.150815" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:58:07.150960" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:07.099251" elapsed="0.051734"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.151382" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:58:06Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.170.138:2550",
    "status": "complete"
   },
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:58:06Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.170.156:2550",
    "status": "complete"
   },
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:58:06Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.171.185:2550",
    "status": "complete"
   }
  ],
  "status": "complete"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.151131" elapsed="0.000335"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.151928" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:58:07.151605" elapsed="0.000350"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:07.152532" elapsed="0.000352"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:58:07.153263" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:07.152958" elapsed="0.000363"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${config_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:07.153943" elapsed="0.000330"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${models_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:07.154414" elapsed="0.000351"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${operational_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:07.154914" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.155587" level="INFO">Found all Json Files</msg>
<arg>Found all Json Files</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.155381" elapsed="0.000263"/>
</kw>
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="PASS" start="2026-04-13T02:58:07.153503" elapsed="0.002197"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:07.153345" elapsed="0.002385"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:07.152939" elapsed="0.002812"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="PASS" start="2026-04-13T02:58:07.152171" elapsed="0.003625"/>
</kw>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Verify export status is as expected</doc>
<status status="PASS" start="2026-04-13T02:58:07.090325" elapsed="0.065521"/>
</kw>
<arg>10 sec</arg>
<arg>5 sec</arg>
<arg>Verify Export Status</arg>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-13T02:58:02.005400" elapsed="5.150494"/>
</kw>
<kw name="Verify Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.156774" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:07.156418" elapsed="0.000382"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:07.157751" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:07.157468" elapsed="0.000310"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:07.160189" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:07.163035" elapsed="0.000253"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.163815" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.163423" elapsed="0.000438"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:07.164555" level="INFO">${conn_id} = 112</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:07.164162" elapsed="0.000419"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.165676" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:07.165754" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:07.165326" elapsed="0.000452"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.165957" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:07.167614" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:07.561069" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:01 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:07.166867" elapsed="0.394397"/>
</kw>
<msg time="2026-04-13T02:58:07.561449" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.166505" elapsed="0.395032"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:07.164805" elapsed="0.396902"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:07.562198" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json'.</msg>
<msg time="2026-04-13T02:58:07.575465" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:07.575852" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<msg time="2026-04-13T02:58:07.575954" 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-04-13T02:58:07.561944" elapsed="0.014064"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:07.576453" elapsed="0.000647"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.578198" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.577480" elapsed="0.000814"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:07.578793" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:07.578468" elapsed="0.000435"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:07.578417" elapsed="0.000537"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:07.579309" elapsed="0.000067"/>
</return>
<status status="PASS" start="2026-04-13T02:58:07.579073" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:07.579039" elapsed="0.000465"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:07.579582" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.584360" elapsed="0.000740"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:07.585363" elapsed="0.000259"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:07.585868" 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-04-13T02:58:07.580289" elapsed="0.005814"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:07.162028" elapsed="0.424217"/>
</kw>
<msg time="2026-04-13T02:58:07.586332" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.161484" elapsed="0.424936"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:07.160969" elapsed="0.425569"/>
</kw>
<msg time="2026-04-13T02:58:07.586599" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.160457" elapsed="0.426231"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.590575" 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-04-13T02:58:07.591151" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:07.591538" 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-04-13T02:58:07.587125" elapsed="0.004589"/>
</kw>
<msg time="2026-04-13T02:58:07.591815" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:07.157977" elapsed="0.433865"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.592288" level="INFO">-rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.592023" elapsed="0.000311"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:07.592381" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:07.592544" level="INFO">${cfg} = -rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<var>${cfg}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_DATA_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:07.157008" elapsed="0.435562"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.593002" level="INFO">-rw-rw-r-- 1 jenkins jenkins 2820 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<arg>${cfg}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.592751" elapsed="0.000297"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${cfg}</arg>
<arg>.*${EXP_DATA_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:07.593187" elapsed="0.000335"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:07.594472" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:07.594198" elapsed="0.000302"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:07.595288" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:07.598314" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.599417" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.598756" elapsed="0.000709"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:07.600010" level="INFO">${conn_id} = 115</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:07.599609" elapsed="0.000427"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.601059" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:07.601137" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:07.600651" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.601308" elapsed="0.000442"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:07.603044" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:07.956183" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:07 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:07.602261" elapsed="0.354188"/>
</kw>
<msg time="2026-04-13T02:58:07.956644" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.601908" elapsed="0.354824"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:07.600248" elapsed="0.356595"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:07.957318" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json'.</msg>
<msg time="2026-04-13T02:58:07.970738" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:07.971201" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<msg time="2026-04-13T02:58:07.971318" 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-04-13T02:58:07.957079" elapsed="0.014298"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:07.971960" elapsed="0.000654"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.974085" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.973201" elapsed="0.001009"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:07.974849" elapsed="0.000051"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:07.974438" elapsed="0.000556"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:07.974371" elapsed="0.000692"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:07.975534" elapsed="0.000089"/>
</return>
<status status="PASS" start="2026-04-13T02:58:07.975222" elapsed="0.000540"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:07.975176" elapsed="0.000659"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:07.975934" elapsed="0.000042"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.982961" 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-04-13T02:58:07.983715" elapsed="0.000206"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:07.984078" elapsed="0.000117"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:07.976837" elapsed="0.007422"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:07.597241" elapsed="0.387128"/>
</kw>
<msg time="2026-04-13T02:58:07.984443" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.596598" elapsed="0.387919"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:07.596078" elapsed="0.388534"/>
</kw>
<msg time="2026-04-13T02:58:07.984703" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.595562" elapsed="0.389194"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.987466" elapsed="0.000350"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:07.987969" elapsed="0.000154"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:07.988257" 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-04-13T02:58:07.985086" elapsed="0.003319"/>
</kw>
<msg time="2026-04-13T02:58:07.988504" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:07.594727" elapsed="0.393803"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.989087" level="INFO">-rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.988746" elapsed="0.000391"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:07.989186" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:58:07.989355" level="INFO">${mdl} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<var>${mdl}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${MODELS_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:07.593777" elapsed="0.395604"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.989935" level="INFO">-rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<arg>${mdl}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.989650" elapsed="0.000331"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${mdl}</arg>
<arg>.*${MODELS_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:07.990125" elapsed="0.000350"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:07.991426" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:07.991149" elapsed="0.000304"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:07.992218" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:07.995183" elapsed="0.000261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.995977" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:07.995579" elapsed="0.000445"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:07.996537" level="INFO">${conn_id} = 118</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:07.996165" elapsed="0.000399"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:07.997563" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:07.997672" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:07.997209" elapsed="0.000489"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.997841" elapsed="0.000608"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:07.999775" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:08.352450" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:07 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:07.998978" elapsed="0.353704"/>
</kw>
<msg time="2026-04-13T02:58:08.352877" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.998609" elapsed="0.354363"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:07.996788" elapsed="0.356306"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:08.354129" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json'.</msg>
<msg time="2026-04-13T02:58:08.367484" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:08.367831" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 2 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<msg time="2026-04-13T02:58:08.367943" 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-04-13T02:58:08.353372" elapsed="0.014626"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:08.368542" elapsed="0.000583"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.370292" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.369573" elapsed="0.000824"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:08.370928" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:08.370583" elapsed="0.000462"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:08.370529" elapsed="0.000572"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:08.371484" elapsed="0.000068"/>
</return>
<status status="PASS" start="2026-04-13T02:58:08.371230" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:08.371193" elapsed="0.000538"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:08.371826" elapsed="0.000042"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:08.376395" elapsed="0.000571"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.377198" elapsed="0.000229"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:08.377616" 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-04-13T02:58:08.372567" elapsed="0.005340"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:07.994122" elapsed="0.383922"/>
</kw>
<msg time="2026-04-13T02:58:08.378129" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.993552" elapsed="0.384658"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:07.993021" elapsed="0.385309"/>
</kw>
<msg time="2026-04-13T02:58:08.378392" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:07.992485" elapsed="0.385973"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:08.382325" elapsed="0.000355"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.382861" elapsed="0.000162"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:08.383169" elapsed="0.000103"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:08.378955" elapsed="0.004370"/>
</kw>
<msg time="2026-04-13T02:58:08.383424" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 2 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:07.991673" elapsed="0.391777"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.383907" level="INFO">-rw-rw-r-- 1 jenkins jenkins 2 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.383641" elapsed="0.000311"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:08.383999" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:08.384160" level="INFO">${opr} = -rw-rw-r-- 1 jenkins jenkins 2 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<var>${opr}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_OPER_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:07.990726" elapsed="0.393460"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.384574" level="INFO">-rw-rw-r-- 1 jenkins jenkins 2 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<arg>${opr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.384331" elapsed="0.000287"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${opr}</arg>
<arg>.*${EXP_OPER_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:08.384774" elapsed="0.000341"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the backedup files are present in the controller</doc>
<status status="PASS" start="2026-04-13T02:58:07.156111" elapsed="1.229086"/>
</kw>
<kw name="Copy Export Directory To Test VM" owner="DaeximKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.386337" level="INFO">${new_dir} = /tmp/Export10.30.170.156</msg>
<var>${new_dir}</var>
<arg>${EXP_DIR}${host}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:08.385942" elapsed="0.000438"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="Directory Should Exist" owner="OperatingSystem">
<msg time="2026-04-13T02:58:08.387141" level="INFO" html="true">Directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;' exists.</msg>
<arg>${new_dir}</arg>
<doc>Fails unless the given path points to an existing directory.</doc>
<status status="PASS" start="2026-04-13T02:58:08.386941" elapsed="0.000362"/>
</kw>
<msg time="2026-04-13T02:58:08.387407" level="INFO">${directory_exist} = True</msg>
<var>${directory_exist}</var>
<arg>OperatingSystem.Directory Should Exist</arg>
<arg>${new_dir}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-13T02:58:08.386559" elapsed="0.000873"/>
</kw>
<if>
<branch type="IF" condition="${directory_exist}">
<kw name="Cleanup Directory" owner="DaeximKeywords">
<kw name="Empty Directory" owner="OperatingSystem">
<msg time="2026-04-13T02:58:08.388588" level="INFO" html="true">Listing contents of directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:08.388847" level="INFO" html="true">Emptied directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<arg>${dir}</arg>
<doc>Deletes all the content from the given directory.</doc>
<status status="PASS" start="2026-04-13T02:58:08.388441" elapsed="0.000462"/>
</kw>
<kw name="Remove Directory" owner="OperatingSystem">
<msg time="2026-04-13T02:58:08.389260" level="INFO" html="true">Listing contents of directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:08.389319" level="INFO" html="true">Directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;' is empty.</msg>
<msg time="2026-04-13T02:58:08.389428" level="INFO" html="true">Removed directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<arg>${dir}</arg>
<doc>Removes the directory pointed to by the given ``path``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.389043" elapsed="0.000434"/>
</kw>
<arg>${new_dir}</arg>
<doc>Cleans up the given directory if it exists</doc>
<status status="PASS" start="2026-04-13T02:58:08.387793" elapsed="0.001739"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:08.387537" elapsed="0.002026"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:08.387512" elapsed="0.002079"/>
</if>
<kw name="Return ConnnectionID" owner="DaeximKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:08.390913" level="INFO">${conn_id} = 121</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.390397" elapsed="0.000544"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.391922" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:08.392016" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:08.391551" elapsed="0.000493"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:08.392219" elapsed="0.000428"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:08.393698" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:08.719667" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:08 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:08.393273" elapsed="0.326550"/>
</kw>
<msg time="2026-04-13T02:58:08.719908" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:08.392832" elapsed="0.327156"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:08.391156" elapsed="0.328943"/>
</kw>
<return>
<value>${conn_id}</value>
<status status="PASS" start="2026-04-13T02:58:08.720160" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T02:58:08.720366" level="INFO">${connections} = 121</msg>
<var>${connections}</var>
<arg>${host}</arg>
<doc>Returns the connection of any host. Defaults to controller</doc>
<status status="PASS" start="2026-04-13T02:58:08.389797" elapsed="0.330596"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connections}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-13T02:58:08.720586" elapsed="0.000199"/>
</kw>
<kw name="Directory Should Exist" owner="SSHLibrary">
<msg time="2026-04-13T02:58:08.730822" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<arg>${WORKSPACE}/${BUNDLEFOLDER}/daexim</arg>
<doc>Fails if the given ``path`` does not point to an existing directory.</doc>
<status status="PASS" start="2026-04-13T02:58:08.720923" elapsed="0.011267"/>
</kw>
<kw name="Get Directory" owner="SSHLibrary">
<msg time="2026-04-13T02:58:08.757310" level="INFO">'/tmp/karaf-0.24.0/daexim/odl_backup_models.json' -&gt; '/tmp/Export10.30.170.156/odl_backup_models.json'</msg>
<msg time="2026-04-13T02:58:08.757580" level="INFO">'/tmp/karaf-0.24.0/daexim/odl_backup_operational.json' -&gt; '/tmp/Export10.30.170.156/odl_backup_operational.json'</msg>
<msg time="2026-04-13T02:58:08.757724" level="INFO">'/tmp/karaf-0.24.0/daexim/odl_backup_config.json' -&gt; '/tmp/Export10.30.170.156/odl_backup_config.json'</msg>
<arg>${WORKSPACE}/${BUNDLEFOLDER}/daexim</arg>
<arg>${new_dir}</arg>
<doc>Downloads a directory, including its content, from the remote machine to the local machine.</doc>
<status status="PASS" start="2026-04-13T02:58:08.732533" elapsed="0.025295"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:08.758045" elapsed="0.000345"/>
</kw>
<kw name="List Files In Directory" owner="OperatingSystem">
<msg time="2026-04-13T02:58:08.758825" level="INFO" html="true">Listing contents of directory '&lt;a href="file:///tmp/Export10.30.170.156"&gt;/tmp/Export10.30.170.156&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:08.758954" level="INFO">3 files:
odl_backup_config.json
odl_backup_models.json
odl_backup_operational.json</msg>
<msg time="2026-04-13T02:58:08.759068" level="INFO">${output} = ['odl_backup_config.json', 'odl_backup_models.json', 'odl_backup_operational.json']</msg>
<var>${output}</var>
<arg>${new_dir}</arg>
<doc>Wrapper for `List Directory` that returns only files.</doc>
<status status="PASS" start="2026-04-13T02:58:08.758589" elapsed="0.000573"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.759795" level="INFO">['odl_backup_config.json', 'odl_backup_models.json', 'odl_backup_operational.json']</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.759368" elapsed="0.000491"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:58:08.760293" level="INFO" html="true">Getting file '&lt;a href="file:///tmp/Export10.30.170.156/odl_backup_config.json"&gt;/tmp/Export10.30.170.156/odl_backup_config.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:08.760483" level="INFO">${fl} = {"aaa-cert-mdsal:key-stores":{"id":"KeyStores:1","ssl-data":[{"bundle-name":"opendaylight","tls-protocols":"","odl-keystore":{"store-password":"5AHEJ7sg5yvn74BHdl3sKsButoYSv7IFunwcn/9FN7fJDf8j7AKIxOw7...</msg>
<var>${fl}</var>
<arg>${new_dir}/${EXP_DATA_FILE}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:58:08.760055" elapsed="0.000464"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.761090" level="INFO">{"aaa-cert-mdsal:key-stores":{"id":"KeyStores:1","ssl-data":[{"bundle-name":"opendaylight","tls-protocols":"","odl-keystore":{"store-password":"5AHEJ7sg5yvn74BHdl3sKsButoYSv7IFunwcn/9FN7fJDf8j7AKIxOw7bvA=","sign-alg":"SHA1WithRSAEncryption","validity":365,"alias":"controller","name":"ctl.jks","dname":"CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA","keystoreFile":"5AHEJ7sg5yvn74BHdl3sKljZHlNBxepq9UVvplUbDCmbzXbnqNyfc0D2mRtXS8605DgJkbHckr6kzFwBi6bdLunBdEOjqbmCiaOoJ2Ysgc5WH/YelOknGWty27ndIcygPzbooOjZ9I7mdKx55PRv5hX0yWvV41CnpBfCpCi1zYd8upW8UIkuFDz0cSlPfKe2x0CF/Q0/wx7VwLqhH2YDhJRqQsSlTWqZ7igaPPqYspg5JDbYlLxHYV3dfLLXH10xTIs3X0yFCgM7k41W97fR2sqXz2ZDU5bR51Oet489hHRYP0WyGSOkJ9qy46tvAoclN1KQCmYHRAHQqu03UeQHjkJCIotJlfLo1bX3358XOfmaC9MBptVdaEpjKmV/ZA+5uTJys5Hro1W0nxWWF2xqiboUSlurFwlLsKS7Sre58YydoLRnmCj/ee0aoYsP2KCPpmdiddxwC0DoRKhFCVfK22dLidfqE8EJ1iUMbGO0qAiTF+SwXLBE2GDtxF/sMRgZv0WjVi/K8Ye8LtkkaWJyiEOcebteHz8/P1lQFuycrAnZs9bgxHijz0uiOs2ut79VxisQhpD5iWRXQwyvFyzJv5/ypwCMK4DZw91tpOWJi2/e3wKVMJ9wgNrwA9RkiBjEUCsw7aUPcI8IkGm6x8mI77W8FmN9gD9lso+0SBlHvPlbZV4FRQaMnWkp6M2BKRhWfTR3EwPd4Xh3Z/SXTpUmBRRG7AhZsGZq1twe/y4Zk0JmzB4/KilwCVIyaez/MJbUT8TVQVI/1oHmUxk51QWvNCgq8rRCQ43dIh/XksPE00b6Urh3qeUcmFHl86vB4WCPyjkcdfeZEErr9YHnNoRmlU1ww0p0LQdV/kONje0u32NjROF5LI9iDBvgsrDhwHbRRiOKLbuy7bDZ28oHAhUhKByr/6YycHNkz7kWT6MRtfZQ0IKZCubX5si3UfGEQfw791dwcnmPI5ip+x2wNIfNsNiIi6stNNPhHeYRGyD+U5WMkleFNSwBjDJa4+NdHbOYBOphjTi6cygJRuyg16M8+av3PRHlJajcDw7yMH6jCbmS7sd6f5Ui3WMc079SK0N0H9DeoUdEYNks6FTzQhIn5VbM563Cob8ep4MdGZcINhIwLlEe1Yy8RzXGn9/UBOaKGgOX6aYr7yav2tT6ghFRRLZdf9JoqfNg9x67De25OChjonXx46NEZHGsHwkDmjXJdCPtSBs6eVtGjKsPmXwQi8j67+KSdXTgX1WWbMJmfmXg71SjYS4U83WvDTkBiXgRr5rPXP+mIijq8JUoRAeN8K7WHQ6TFJorSgogq5GqKvYj5BiL25Lg+zoZyFjizASoOESZjcVVEs03Qfe9wYAKoHsoUcGc7+ktoVBXP3jEK29fjytLOY1ZDeYM63SBLKUR6Y1ZVcU1zkLwgNC8+tW443UBfrCK7/W7TObeNBhIJqisulQn0cyiKUtSkYPC82hlDWEYp6Cd4nLj70hcO4F2j65XolF9u2mkazU6JolG4sno8mhw4FBrQT27Xb6d6jWbW9zug9GDKdFFSdqMJn/cAjJzWlNK/TiM+H7B+DfFmFWLvdcoCPNToRbx2ZO0PQX9GjN4vOekxZ7PcVtXr4UX9nyvvei2BtY/VPRgr/fQDsloHmNY/eHR40x3xPolOADo5e4X1xQ7wIrJWHiGyApUMCS1lvsYEL468XVplmq6gA3nldaWPhuJCKNrd6CobrafrNvOiICfg/TL3IoUQ3dzpMhJ/egbkT5/5LZrN019LbvZUqolKyE32eXMhzCVxwuPJxrexoOquJQ8y/7C6G3HgWg=","key-alg":"RSA","keysize":1024},"cipher-suites":[{"suiteName":""}],"trust-keystore":{"keystoreFile":"5AHEJ7sg5yvn74BHdl3sKljZHlNBxepq9UVvp70b7dvd0eJy300XbNkxGKmQugFXL1FQtzgOwqJraU38pFhjXw==","store-password":"5AHEJ7sg5yvn74BHdl3sKuJCqo51qaBawz8VlnYlif8VT3m2ixY56Ef+2KM=","name":"truststore.jks"}}]},"aaa-encrypt-service-config:aaa-encrypt-service-config":{"encrypt-type":"AES","encrypt-key-length":128,"password-length":12,"cipher-transforms":"AES/GCM/NoPadding","encrypt-key":"pqO7nsOXMyRk","encrypt-salt":"5AHEJ7sg5yvn74BHdl3sKg==","auth-tag-length":128,"encrypt-method":"PBKDF2WithHmacSHA1","encrypt-iteration-count":32768}}</msg>
<arg>${fl}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.760745" elapsed="0.000435"/>
</kw>
<arg>${host}</arg>
<doc>This keyword copies the daexim folder genereated in the controller to robot vm. This is done to editing if needed on the json files</doc>
<status status="PASS" start="2026-04-13T02:58:08.385505" elapsed="0.375754"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.762164" level="INFO">${export_file} = odl_backup_operational.json</msg>
<var>${export_file}</var>
<arg>'${store}' == 'operational'</arg>
<arg>${EXP_OPER_FILE}</arg>
<arg>${EXP_DATA_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:08.761522" elapsed="0.000681"/>
</kw>
<kw name="Join Path" owner="OperatingSystem">
<msg time="2026-04-13T02:58:08.762774" level="INFO">${file_path} = /tmp/Export10.30.170.156/odl_backup_operational.json</msg>
<var>${file_path}</var>
<arg>${EXP_DIR}${host}</arg>
<arg>${export_file}</arg>
<doc>Joins the given path part(s) to the given base path.</doc>
<status status="PASS" start="2026-04-13T02:58:08.762409" elapsed="0.000403"/>
</kw>
<return>
<value>${file_path}</value>
<status status="PASS" start="2026-04-13T02:58:08.762883" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T02:58:08.763105" level="INFO">${file2} = /tmp/Export10.30.170.156/odl_backup_operational.json</msg>
<var>${file2}</var>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>operational</arg>
<arg>*</arg>
<doc>Schedules a export with exclude option. Returns the file that has the excluded export.</doc>
<status status="PASS" start="2026-04-13T02:58:00.772802" elapsed="7.990338"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:58:08.763545" level="INFO" html="true">Getting file '&lt;a href="file:///tmp/Export10.30.170.156/odl_backup_operational.json"&gt;/tmp/Export10.30.170.156/odl_backup_operational.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:08.763737" level="INFO">${lines2} = {}</msg>
<var>${lines2}</var>
<arg>${file2}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:58:08.763352" elapsed="0.000422"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${lines2}</arg>
<arg>{}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-13T02:58:08.763975" elapsed="0.000415"/>
</kw>
<doc>schedule export with wildstar exclude option</doc>
<tag>wildcard exclude export</tag>
<status status="PASS" start="2026-04-13T02:57:52.834985" elapsed="15.929570"/>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-13T02:58:08.765738" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-13T02:58:08.765598" elapsed="0.000273"/>
</kw>
<doc>Test suite for verifying basic variations of export API including checking statuses</doc>
<status status="PASS" start="2026-04-13T02:57:18.287821" elapsed="50.478085"/>
</suite>
<suite id="s1-s2" name="110-Cluster-Local-Export-Basic" source="/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/suites/daexim/110-cluster-local-export-basic.robot">
<kw name="ClusterManagement_Setup" owner="ClusterManagement" type="SETUP">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.849886" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-13T02:58:08.845892" elapsed="0.004043"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-13T02:58:08.850212" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:08.850075" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:08.850042" elapsed="0.000245"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.850927" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:58:08.850550" elapsed="0.000421"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.851465" 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-04-13T02:58:08.851126" elapsed="0.000374"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:08.852084" elapsed="0.000418"/>
</kw>
<msg time="2026-04-13T02:58:08.852620" level="INFO">${status} = PASS</msg>
<msg time="2026-04-13T02:58:08.852690" 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 error.</doc>
<status status="PASS" start="2026-04-13T02:58:08.851677" elapsed="0.001045"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.853333" 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-04-13T02:58:08.852890" elapsed="0.000478"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.854499" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:58:08.854197" elapsed="0.000337"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.855021" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:58:08.854715" elapsed="0.000333"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.855541" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.855215" elapsed="0.000354"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.858689" elapsed="0.000238"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.859412" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:08.859084" elapsed="0.000354"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.859577" elapsed="0.000247"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.860580" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:08.860286" elapsed="0.000321"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:08.860669" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T02:58:08.860835" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-13T02:58:08.860008" elapsed="0.000852"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:08.861468" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.156:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7fe77217d850&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-13T02:58:08.861002" elapsed="0.000617"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.861783" elapsed="0.000209"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-13T02:58:08.858122" elapsed="0.003933"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-13T02:58:08.857929" elapsed="0.004171"/>
</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-04-13T02:58:08.862923" elapsed="0.000188"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.863576" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:08.863253" elapsed="0.000349"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.863754" elapsed="0.000222"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.865138" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:08.864499" elapsed="0.000666"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:08.865212" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:08.865366" 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-04-13T02:58:08.864151" elapsed="0.001240"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:08.866022" level="INFO">Creating Session using : alias=ClusterManagement__session_2, url=http://10.30.170.138:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7fe77075aa90&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-13T02:58:08.865569" elapsed="0.000613"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.866334" elapsed="0.000193"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-13T02:58:08.862368" elapsed="0.004218"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-13T02:58:08.862196" elapsed="0.004450"/>
</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-04-13T02:58:08.867435" elapsed="0.000185"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.868115" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:08.867780" elapsed="0.000361"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.868276" elapsed="0.000218"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.869256" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:08.868965" elapsed="0.000317"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:08.869327" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:08.869505" 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-04-13T02:58:08.868690" elapsed="0.000840"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:08.870099" level="INFO">Creating Session using : alias=ClusterManagement__session_3, url=http://10.30.171.185:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7fe770778b90&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-13T02:58:08.869684" elapsed="0.000529"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.870359" elapsed="0.000187"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-13T02:58:08.866903" elapsed="0.003703"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-13T02:58:08.866735" elapsed="0.003931"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-04-13T02:58:08.855666" elapsed="0.015034"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.871212" level="INFO">${ClusterManagement__member_index_list} = [1, 2, 3]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:58:08.870856" elapsed="0.000399"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.871765" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.156', 2: '10.30.170.138', 3: '10.30.171.185'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:58:08.871398" elapsed="0.000410"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.872292" 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 a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:58:08.871953" elapsed="0.000382"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-13T02:58:08.853695" elapsed="0.018697"/>
</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-04-13T02:58:08.845477" elapsed="0.026972"/>
</kw>
<test id="s1-s2-t1" name="Create Basic Local Export" line="11">
<kw name="Mount Netconf Endpoint" owner="DaeximKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.874054" level="INFO">${ENDPOINT} = CONTROLLER1</msg>
<var>${ENDPOINT}</var>
<arg>${endpoint}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:08.873743" elapsed="0.000339"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:08.892277" elapsed="0.000551"/>
</kw>
<msg time="2026-04-13T02:58:08.892885" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:08.891913" elapsed="0.001026"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return ../variables/daexim/scandium/netconf_mount.json if vanadium is at least ${lower_bound},
return ../variables/daexim/calcium/netconf_mount.json otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:08.891517" elapsed="0.001498"/>
</kw>
<msg time="2026-04-13T02:58:08.893108" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:08.882511" elapsed="0.010643"/>
</kw>
<msg time="2026-04-13T02:58:08.893260" level="INFO">${dictionary} = ../variables/daexim/scandium/netconf_mount.json</msg>
<var>${dictionary}</var>
<arg>${NETCONF_PAYLOAD_JSON_SCANDIUM}</arg>
<arg>${NETCONF_PAYLOAD_JSON_CALCIUM}</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:08.882128" elapsed="0.011158"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:58:08.893616" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/scandium/netconf_mount.json"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/scandium/netconf_mount.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:08.893810" level="INFO">${json} = {
  "node": {
    "node-id": "${ENDPOINT}",
    "netconf-node": {
        "host": "127.0.0.1",
        "port": "1830",
        "tcp-only": "false",
        "keepalive-delay": "0",
        "login-passw...</msg>
<var>${json}</var>
<arg>/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/${dictionary}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:58:08.893456" elapsed="0.000381"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.894310" level="INFO">${json} = {
  "node": {
    "node-id": "CONTROLLER1",
    "netconf-node": {
        "host": "127.0.0.1",
        "port": "1830",
        "tcp-only": "false",
        "keepalive-delay": "0",
        "login-passw...</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-13T02:58:08.893979" elapsed="0.000358"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.894733" level="INFO">{
  "node": {
    "node-id": "CONTROLLER1",
    "netconf-node": {
        "host": "127.0.0.1",
        "port": "1830",
        "tcp-only": "false",
        "keepalive-delay": "0",
        "login-password-unencrypted": {
            "username": "admin",
            "password": "admin"
        }
    }
  }
}
</msg>
<arg>${json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.894476" elapsed="0.000305"/>
</kw>
<kw name="Put_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.900957" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:08.900519" elapsed="0.000474"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:08.901058" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T02:58:08.901271" 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-04-13T02:58:08.900062" elapsed="0.001243"/>
</kw>
<kw name="Put_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.908003" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.907710" elapsed="0.000341"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.908468" level="INFO">{
  "node": {
    "node-id": "CONTROLLER1",
    "netconf-node": {
        "host": "127.0.0.1",
        "port": "1830",
        "tcp-only": "false",
        "keepalive-delay": "0",
        "login-password-unencrypted": {
            "username": "admin",
            "password": "admin"
        }
    }
  }
}
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.908198" elapsed="0.000333"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.909006" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.908702" elapsed="0.000365"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.909488" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.909224" elapsed="0.000309"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:08.910391" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:58:08.910147" elapsed="0.000271"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:58:08.910811" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:58:08.910596" elapsed="0.000242"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.910981" elapsed="0.000219"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.911599" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.911348" elapsed="0.000313"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:58:08.911706" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:08.911862" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:58:08.909738" elapsed="0.002148"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:08.940433" level="INFO">PUT Request : url=http://10.30.170.156:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '307', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body={
  "node": {
    "node-id": "CONTROLLER1",
    "netconf-node": {
        "host": "127.0.0.1",
        "port": "1830",
        "tcp-only": "false",
        "keepalive-delay": "0",
        "login-password-unencrypted": {
            "username": "admin",
            "password": "admin"
        }
    }
  }
}
 
 </msg>
<msg time="2026-04-13T02:58:08.940699" level="INFO">PUT Response : url=http://10.30.170.156:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=201, reason=Created 
 headers={'Set-Cookie': 'JSESSIONID=node0mmvrrynycomnr51bovvak4y21.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Sun, 12-Apr-2026 02:58:08 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:08.941131" level="INFO">${response} = &lt;Response [201]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:58:08.914172" elapsed="0.027023"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:08.911965" elapsed="0.029346"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:08.941934" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:08.941378" elapsed="0.000717"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:08.911944" elapsed="0.030200"/>
</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-04-13T02:58:08.948050" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.944332" elapsed="0.003779"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:08.943852" elapsed="0.004309"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:08.943808" elapsed="0.004389"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.951644" level="INFO">201</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.948576" elapsed="0.003136"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:08.948278" elapsed="0.003482"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:08.948254" elapsed="0.003540"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.952555" 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-04-13T02:58:08.952010" elapsed="0.000583"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:08.953019" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:08.952713" elapsed="0.000388"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.953847" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:08.953377" elapsed="0.000508"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:08.953134" elapsed="0.000801"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:08.952687" elapsed="0.001277"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.954688" 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-04-13T02:58:08.954160" elapsed="0.000566"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:08.955122" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:08.954824" elapsed="0.000376"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.955864" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:08.955427" elapsed="0.000473"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:08.955233" elapsed="0.000715"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:08.954799" elapsed="0.001178"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:08.956170" elapsed="0.000509"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:08.957280" 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-04-13T02:58:08.956886" elapsed="0.000429"/>
</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-04-13T02:58:08.957539" elapsed="0.002304"/>
</kw>
<arg>${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-04-13T02:58:08.942980" elapsed="0.016931"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:08.960095" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:08.959984" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:08.959964" elapsed="0.000201"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:58:08.962550" level="INFO">${text_normalized} = </msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:58:08.960302" elapsed="0.002276"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:58:08.962642" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T02:58:08.962811" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>PUT data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:58:08.904944" elapsed="0.057893"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:08.962968" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:08.963120" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Put_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.</doc>
<status status="PASS" start="2026-04-13T02:58:08.901618" elapsed="0.061526"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:08.963194" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:58:08.963340" level="INFO">${resp} = </msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${json}</arg>
<arg>${host_index}</arg>
<doc>Send a PUT with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:08.899315" elapsed="0.064049"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.963811" level="INFO"/>
<arg>${resp}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.963523" elapsed="0.000332"/>
</kw>
<arg>${NETCONF_EP_NAME}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Mount a netconf endpoint</doc>
<status status="PASS" start="2026-04-13T02:58:08.873329" elapsed="0.090582"/>
</kw>
<kw name="Cleanup Cluster Export Files" owner="DaeximKeywords">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.967251" 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-04-13T02:58:08.966815" elapsed="0.000467"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.967807" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:58:08.967441" elapsed="0.000403"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-13T02:58:08.967906" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T02:58:08.968086" 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-04-13T02:58:08.966400" elapsed="0.001714"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.969252" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:08.968919" elapsed="0.000362"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.982865" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:08.982503" elapsed="0.000395"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:08.982954" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T02:58:08.983116" 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-04-13T02:58:08.982163" elapsed="0.000978"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.985957" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.985692" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:08.988532" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:58:08.988041" elapsed="0.001089">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:58:08.986083" elapsed="0.003141">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:08.989416" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:08.989262" elapsed="0.000260"/>
</branch>
<status status="FAIL" start="2026-04-13T02:58:08.986060" elapsed="0.003491">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:58:08.989950" elapsed="0.000026"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:08.990026" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:58:08.983409" elapsed="0.006729">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:08.990195" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-13T02:58:08.981782" elapsed="0.008509">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:08.990470" elapsed="0.000024"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:08.990622" elapsed="0.000036"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:58:08.979512" elapsed="0.011240">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:08.969435" elapsed="0.021391"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:08.992132" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.991842" elapsed="0.000317"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:08.992966" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:08.997174" elapsed="0.000425"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:08.998913" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:08.997822" elapsed="0.001185"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:09.000050" level="INFO">${conn_id} = 122</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:08.999229" elapsed="0.000866"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:09.002260" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:09.002449" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:09.001670" elapsed="0.000895"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:09.003347" elapsed="0.000708"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:09.006136" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:09.315586" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:08 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:09.005760" elapsed="0.310048"/>
</kw>
<msg time="2026-04-13T02:58:09.315989" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:09.004873" elapsed="0.311255"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:09.000418" elapsed="0.315934"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:09.317284" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:09.341481" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:09.342022" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:09.342100" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:09.316788" elapsed="0.025356"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:09.342679" elapsed="0.000403"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:09.343947" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:09.343331" elapsed="0.000702"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:09.344417" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:09.344184" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:09.344151" elapsed="0.000418"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:09.344820" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-13T02:58:09.344638" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:09.344609" elapsed="0.000377"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:09.345021" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:09.348346" elapsed="0.000858"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:09.349454" elapsed="0.000520"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:09.350206" elapsed="0.000308"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:09.345357" elapsed="0.005249"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:08.995240" elapsed="0.355483"/>
</kw>
<msg time="2026-04-13T02:58:09.350783" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:08.994320" elapsed="0.356526"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:08.993796" elapsed="0.357131"/>
</kw>
<msg time="2026-04-13T02:58:09.350968" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:08.993252" elapsed="0.357760"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:09.353756" 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-04-13T02:58:09.354234" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:09.354517" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:09.351301" elapsed="0.003381"/>
</kw>
<msg time="2026-04-13T02:58:09.354776" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:08.992373" elapsed="0.362428"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:09.355238" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:09.354987" elapsed="0.000292"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:09.355325" elapsed="0.000033"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:08.991408" elapsed="0.364049"/>
</kw>
<msg time="2026-04-13T02:58:09.355543" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:08.990976" elapsed="0.364592"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:09.357116" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:09.356840" elapsed="0.000302"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:09.357966" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:09.362011" elapsed="0.000371"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:09.363588" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:09.362575" elapsed="0.001118"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:09.364645" level="INFO">${conn_id} = 125</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:09.363894" elapsed="0.000794"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:09.366972" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:09.367165" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:09.366143" elapsed="0.001129"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:09.368000" elapsed="0.000671"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:09.370553" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:09.732873" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:09 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:09.370215" elapsed="0.362815"/>
</kw>
<msg time="2026-04-13T02:58:09.733184" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:09.369400" elapsed="0.363894"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:09.364989" elapsed="0.368470"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:09.734278" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:09.747353" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:09.747871" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:09.748092" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:09.733844" elapsed="0.014384"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:09.749056" elapsed="0.000825"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:09.751994" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:09.750592" elapsed="0.001604"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:09.752996" elapsed="0.000050"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:09.752501" elapsed="0.000788"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:09.752447" elapsed="0.000907"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:09.754047" elapsed="0.000068"/>
</return>
<status status="PASS" start="2026-04-13T02:58:09.753478" elapsed="0.000867"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:09.753444" elapsed="0.000963"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:09.754484" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:09.759827" elapsed="0.000824"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:09.760904" elapsed="0.000526"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:09.761784" elapsed="0.000362"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:09.755331" elapsed="0.006921"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:09.360107" elapsed="0.402246"/>
</kw>
<msg time="2026-04-13T02:58:09.762412" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:09.359331" elapsed="0.403147"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:09.358818" elapsed="0.403746"/>
</kw>
<msg time="2026-04-13T02:58:09.762607" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:09.358318" elapsed="0.404378"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:09.765542" 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-04-13T02:58:09.766097" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:09.766396" elapsed="0.000100"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:09.763002" elapsed="0.003546"/>
</kw>
<msg time="2026-04-13T02:58:09.766661" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:09.357346" elapsed="0.409343"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:09.767153" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:09.766880" elapsed="0.000316"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:09.767242" elapsed="0.000038"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:09.356417" elapsed="0.410964"/>
</kw>
<msg time="2026-04-13T02:58:09.767471" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:09.355791" elapsed="0.411705"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:09.768559" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:09.768281" elapsed="0.000306"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:09.769355" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:09.772679" elapsed="0.000269"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:09.773559" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:09.773091" elapsed="0.000515"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:09.774873" level="INFO">${conn_id} = 128</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:09.773773" elapsed="0.001290"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:09.777183" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:09.777368" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:09.776312" elapsed="0.001097"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:09.777625" elapsed="0.001001"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:09.782623" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:10.099607" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:09 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:09.781306" elapsed="0.318577"/>
</kw>
<msg time="2026-04-13T02:58:10.100075" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:09.779046" elapsed="0.321259"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:09.775554" elapsed="0.324985"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:10.101132" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:58:10.114203" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:10.114619" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:58:10.114810" 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-04-13T02:58:10.100838" elapsed="0.014043"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:10.115414" elapsed="0.000908"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.117803" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:10.116851" elapsed="0.001081"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:10.118601" elapsed="0.000088"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:10.118219" elapsed="0.000565"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:10.118152" elapsed="0.000693"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:10.119171" elapsed="0.000061"/>
</return>
<status status="PASS" start="2026-04-13T02:58:10.118950" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:10.118920" elapsed="0.000439"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:10.119433" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.137059" elapsed="0.000728"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:10.138004" elapsed="0.000277"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:10.138479" 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-04-13T02:58:10.120124" elapsed="0.018597"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:09.771605" elapsed="0.367251"/>
</kw>
<msg time="2026-04-13T02:58:10.138948" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:09.771021" elapsed="0.368013"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:09.770484" elapsed="0.368665"/>
</kw>
<msg time="2026-04-13T02:58:10.139212" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:09.769646" elapsed="0.369630"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.143407" elapsed="0.000778"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:10.144395" elapsed="0.000203"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:10.144796" elapsed="0.000139"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:10.140070" elapsed="0.004938"/>
</kw>
<msg time="2026-04-13T02:58:10.145140" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:09.768811" elapsed="0.376365"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.145801" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:10.145427" elapsed="0.000440"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:10.145929" elapsed="0.000048"/>
</return>
<msg time="2026-04-13T02:58:10.146225" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:09.767878" elapsed="0.378386"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.146808" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:10.146459" elapsed="0.000419"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:10.147067" elapsed="0.000407"/>
</kw>
<arg>${index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:58:08.968567" elapsed="1.178973"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-13T02:58:08.968342" elapsed="1.179231"/>
</iter>
<iter>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.148792" level="INFO">${host_index} = 2</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:10.148286" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.164989" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:10.164473" elapsed="0.000549"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:10.165086" elapsed="0.000056"/>
</return>
<msg time="2026-04-13T02:58:10.165322" 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-04-13T02:58:10.164088" elapsed="0.001274"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.169652" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:10.169244" elapsed="0.000477"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:10.173131" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:58:10.172460" elapsed="0.001567">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:58:10.169807" elapsed="0.004368">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:10.174448" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:10.174230" elapsed="0.000397"/>
</branch>
<status status="FAIL" start="2026-04-13T02:58:10.169783" elapsed="0.004907">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:58:10.175261" elapsed="0.000037"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:10.175364" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:58:10.165782" elapsed="0.009739">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:10.175604" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 2.</doc>
<status status="FAIL" start="2026-04-13T02:58:10.163529" elapsed="0.012247">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:10.176016" elapsed="0.000034"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:10.176124" elapsed="0.000019"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:58:10.160490" elapsed="0.015743">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:10.149055" elapsed="0.027247"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:10.178075" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:10.177685" elapsed="0.000479"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:10.179246" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:10.184511" elapsed="0.000512"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.186772" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:10.185295" elapsed="0.001577"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:10.188197" level="INFO">${conn_id} = 131</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:10.187128" elapsed="0.001132"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.191316" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:10.191498" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:10.190462" elapsed="0.001206"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.192651" elapsed="0.000897"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:10.196106" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:10.524311" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:15 UTC 2026

  System load:  0.46               Processes:             123
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


[?2004h[jenkins@releng-23298-180-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-04-13T02:58:10.195689" elapsed="0.328867"/>
</kw>
<msg time="2026-04-13T02:58:10.524712" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.194617" elapsed="0.330203"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:10.188651" elapsed="0.336333"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:10.525620" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:10.548879" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:10.549231" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:10.549390" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:10.525271" elapsed="0.024203"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:10.550083" elapsed="0.000540"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.552479" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:10.551164" elapsed="0.001543"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:10.553501" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:10.553029" elapsed="0.000782"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:10.552972" elapsed="0.000906"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:10.554484" elapsed="0.000069"/>
</return>
<status status="PASS" start="2026-04-13T02:58:10.554010" elapsed="0.000839"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:10.553973" elapsed="0.000925"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:10.554948" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.559175" elapsed="0.001091"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:10.560601" elapsed="0.000689"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:10.561608" elapsed="0.000434"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:10.555392" elapsed="0.006775"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:10.181991" elapsed="0.380309"/>
</kw>
<msg time="2026-04-13T02:58:10.562416" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.181016" elapsed="0.381476"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:10.180395" elapsed="0.382208"/>
</kw>
<msg time="2026-04-13T02:58:10.562681" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.179673" elapsed="0.383072"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.565610" elapsed="0.000329"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:10.566087" elapsed="0.000144"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:10.566377" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:10.563100" elapsed="0.003424"/>
</kw>
<msg time="2026-04-13T02:58:10.566617" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:10.178465" elapsed="0.388191"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.567083" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:10.566837" elapsed="0.000287"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:10.567167" elapsed="0.000029"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:10.177140" elapsed="0.390151"/>
</kw>
<msg time="2026-04-13T02:58:10.567377" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:10.176458" elapsed="0.390943"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:10.568764" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:10.568420" elapsed="0.000371"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:10.569511" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:10.573307" elapsed="0.000350"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.574844" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:10.573850" elapsed="0.001076"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:10.575851" level="INFO">${conn_id} = 134</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:10.575121" elapsed="0.000772"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.577843" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:10.578016" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:10.577253" elapsed="0.000868"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.578874" elapsed="0.000616"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:10.581233" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:10.893038" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:15 UTC 2026

  System load:  0.46               Processes:             123
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:10 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:10.580914" elapsed="0.312316"/>
</kw>
<msg time="2026-04-13T02:58:10.893406" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.580229" elapsed="0.313323"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:10.576178" elapsed="0.317631"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:10.894817" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:10.908199" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:10.908584" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:10.908782" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:10.894226" elapsed="0.014643"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:10.909436" elapsed="0.000571"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.911424" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:10.910472" elapsed="0.001041"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:10.912049" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:10.911739" elapsed="0.000881"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:10.911697" elapsed="0.000994"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:10.913047" elapsed="0.000052"/>
</return>
<status status="PASS" start="2026-04-13T02:58:10.912782" elapsed="0.000438"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:10.912757" elapsed="0.000506"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:10.913321" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.917760" elapsed="0.001190"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:10.919308" elapsed="0.000647"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:10.920294" elapsed="0.000452"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:10.913797" elapsed="0.007087"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:10.571459" elapsed="0.349570"/>
</kw>
<msg time="2026-04-13T02:58:10.921119" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.570834" elapsed="0.350380"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:10.570273" elapsed="0.351064"/>
</kw>
<msg time="2026-04-13T02:58:10.921400" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.569793" elapsed="0.351677"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.925410" 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-04-13T02:58:10.926151" elapsed="0.000176"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:10.926464" elapsed="0.000130"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:10.922036" elapsed="0.004640"/>
</kw>
<msg time="2026-04-13T02:58:10.926814" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:10.568991" elapsed="0.357849"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.927291" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:10.927032" elapsed="0.000300"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:10.927380" elapsed="0.000034"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:10.568039" elapsed="0.359473"/>
</kw>
<msg time="2026-04-13T02:58:10.927600" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:10.567614" elapsed="0.360010"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:10.928527" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:10.928256" elapsed="0.000297"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:10.929306" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:10.932694" elapsed="0.000274"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.933573" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:10.933106" elapsed="0.000514"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:10.934201" level="INFO">${conn_id} = 137</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:10.933784" elapsed="0.000443"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:10.935444" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:10.935568" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:10.934927" elapsed="0.000666"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.935780" elapsed="0.000660"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:10.938338" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:11.259542" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:15 UTC 2026

  System load:  0.46               Processes:             123
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:10 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:10.937783" elapsed="0.322018"/>
</kw>
<msg time="2026-04-13T02:58:11.259939" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.936672" elapsed="0.323439"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:10.934485" elapsed="0.325801"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:11.260804" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:58:11.273450" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:11.273752" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:58:11.273852" 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-04-13T02:58:11.260514" elapsed="0.013390"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:11.274299" elapsed="0.000832"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:11.276311" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:11.275537" elapsed="0.000873"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:11.276969" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:11.276597" elapsed="0.000486"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:11.276539" elapsed="0.000600"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:11.277510" elapsed="0.000066"/>
</return>
<status status="PASS" start="2026-04-13T02:58:11.277264" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:11.277229" elapsed="0.000520"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:11.277829" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:11.295586" elapsed="0.000596"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:11.296337" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:11.296882" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:11.278536" elapsed="0.018505"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:10.931553" elapsed="0.365582"/>
</kw>
<msg time="2026-04-13T02:58:11.297258" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.930711" elapsed="0.366605"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:10.930144" elapsed="0.367254"/>
</kw>
<msg time="2026-04-13T02:58:11.297444" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:10.929572" elapsed="0.367917"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:11.300190" 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-04-13T02:58:11.300672" elapsed="0.000144"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:11.300949" 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-04-13T02:58:11.297786" elapsed="0.003308"/>
</kw>
<msg time="2026-04-13T02:58:11.301185" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:10.928773" elapsed="0.372439"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:11.301620" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:11.301377" elapsed="0.000346"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:11.301765" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:11.301917" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:10.927865" elapsed="0.374079"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:11.302327" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:11.302087" elapsed="0.000289"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:11.302508" elapsed="0.000341"/>
</kw>
<arg>${index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:58:10.147951" elapsed="1.154959"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-13T02:58:10.147739" elapsed="1.155204"/>
</iter>
<iter>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:11.303877" level="INFO">${host_index} = 3</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:11.303555" elapsed="0.000348"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:11.315380" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:11.315081" elapsed="0.000326"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:11.315453" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:11.315600" 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-04-13T02:58:11.314721" elapsed="0.000903"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:11.320368" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:11.320111" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:11.322924" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:58:11.322474" elapsed="0.001005">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:58:11.320537" elapsed="0.003022">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:11.323746" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:11.323591" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-04-13T02:58:11.320514" elapsed="0.003318">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:58:11.324199" elapsed="0.000026"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:11.324274" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:58:11.315919" elapsed="0.008467">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:11.324445" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 3.</doc>
<status status="FAIL" start="2026-04-13T02:58:11.314329" elapsed="0.010212">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:11.324734" elapsed="0.000022"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:11.324807" elapsed="0.000015"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:58:11.312022" elapsed="0.012881">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:11.304045" elapsed="0.020923"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:11.326249" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:11.325970" elapsed="0.000307"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:11.327238" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:11.331155" elapsed="0.000386"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:11.332753" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:11.331754" elapsed="0.001087"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:11.334034" level="INFO">${conn_id} = 140</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:11.333123" elapsed="0.000957"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:11.336835" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:11.337015" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:11.336186" elapsed="0.000999"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:11.337927" elapsed="0.000637"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:11.340467" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:11.683124" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:16 UTC 2026

  System load:  0.07               Processes:             130
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


[?2004h[jenkins@releng-23298-180-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-04-13T02:58:11.340138" elapsed="0.343168"/>
</kw>
<msg time="2026-04-13T02:58:11.683481" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:11.339435" elapsed="0.344180"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:11.334420" elapsed="0.349439"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:11.684538" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:11.709553" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:11.710018" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:11.710161" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:11.684179" elapsed="0.026057"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:11.710829" elapsed="0.000567"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:11.712916" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:11.711854" elapsed="0.001214"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:11.713743" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:11.713330" elapsed="0.000621"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:11.713281" elapsed="0.000721"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:11.714433" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-04-13T02:58:11.714106" elapsed="0.000596"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:11.714076" elapsed="0.000681"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:11.714824" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:11.719268" elapsed="0.001085"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:11.720725" elapsed="0.000579"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:11.721612" elapsed="0.000423"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:11.715460" elapsed="0.006695"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:11.329196" elapsed="0.393086"/>
</kw>
<msg time="2026-04-13T02:58:11.722357" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:11.328511" elapsed="0.393925"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:11.327998" elapsed="0.394551"/>
</kw>
<msg time="2026-04-13T02:58:11.722605" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:11.327507" elapsed="0.395181"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:11.725973" elapsed="0.000373"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:11.726503" elapsed="0.000195"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:11.726840" elapsed="0.000189"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:11.723126" elapsed="0.003968"/>
</kw>
<msg time="2026-04-13T02:58:11.727196" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:11.326477" elapsed="0.400745"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:11.727756" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:11.727408" elapsed="0.000392"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:11.727848" elapsed="0.000038"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:11.325548" elapsed="0.402438"/>
</kw>
<msg time="2026-04-13T02:58:11.728085" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:11.325112" elapsed="0.403000"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:11.729435" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:11.729149" elapsed="0.000314"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:11.730290" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:11.734605" elapsed="0.000446"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:11.736343" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:11.735257" elapsed="0.001175"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:11.737418" 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-04-13T02:58:11.736655" elapsed="0.000806"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:11.739538" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:11.739746" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:11.738924" elapsed="0.000933"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:11.740595" elapsed="0.000822"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:11.743335" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:12.062201" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:16 UTC 2026

  System load:  0.07               Processes:             130
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:11 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:11.742988" elapsed="0.319373"/>
</kw>
<msg time="2026-04-13T02:58:12.062506" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:11.742202" elapsed="0.320518"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:11.737797" elapsed="0.325087"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:12.063683" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:12.076709" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:12.077157" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:12.077352" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:12.063274" elapsed="0.014191"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:12.078230" elapsed="0.000589"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.080483" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:12.079413" elapsed="0.001195"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:12.081164" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:12.080849" elapsed="0.000493"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:12.080808" elapsed="0.000575"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:12.081788" elapsed="0.000049"/>
</return>
<status status="PASS" start="2026-04-13T02:58:12.081467" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:12.081443" elapsed="0.000592"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:12.082090" elapsed="0.000023"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.086748" elapsed="0.001269"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:12.088419" elapsed="0.000736"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:12.089504" elapsed="0.000531"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:12.082577" elapsed="0.007601"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:11.732425" elapsed="0.357901"/>
</kw>
<msg time="2026-04-13T02:58:12.090409" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:11.731740" elapsed="0.358761"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:11.731129" elapsed="0.359656"/>
</kw>
<msg time="2026-04-13T02:58:12.090857" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:11.730570" elapsed="0.360375"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.094372" elapsed="0.000543"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:12.095082" elapsed="0.000197"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:12.095418" elapsed="0.000105"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:12.091443" elapsed="0.004134"/>
</kw>
<msg time="2026-04-13T02:58:12.095695" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:11.729706" elapsed="0.366018"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.096242" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:12.095914" elapsed="0.000392"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:12.096364" elapsed="0.000045"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:11.728739" elapsed="0.367794"/>
</kw>
<msg time="2026-04-13T02:58:12.096659" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:11.728268" elapsed="0.368419"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:12.097724" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:12.097370" elapsed="0.000387"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:12.098792" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:12.102389" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.103415" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:12.102863" elapsed="0.000603"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:12.104087" level="INFO">${conn_id} = 146</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:12.103615" elapsed="0.000500"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.105378" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:12.105508" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:12.104819" elapsed="0.000715"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.105734" elapsed="0.000718"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:12.108528" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:12.481745" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:16 UTC 2026

  System load:  0.07               Processes:             130
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:12 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:12.107951" elapsed="0.374029"/>
</kw>
<msg time="2026-04-13T02:58:12.482115" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.106696" elapsed="0.375589"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:12.104336" elapsed="0.378125"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:12.482973" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:58:12.495730" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:12.495913" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:58:12.495961" 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-04-13T02:58:12.482708" elapsed="0.013283"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:12.496422" elapsed="0.000599"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.498209" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:12.497420" elapsed="0.000891"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:12.498856" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:12.498499" elapsed="0.000472"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:12.498443" elapsed="0.000582"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:12.499544" elapsed="0.000076"/>
</return>
<status status="PASS" start="2026-04-13T02:58:12.499150" elapsed="0.000588"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:12.499115" elapsed="0.000683"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:12.499881" elapsed="0.000034"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.516736" 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-04-13T02:58:12.517499" elapsed="0.000203"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:12.517842" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:12.500609" elapsed="0.017393"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:12.101201" elapsed="0.416899"/>
</kw>
<msg time="2026-04-13T02:58:12.518169" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.100246" elapsed="0.417988"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:12.099715" elapsed="0.418602"/>
</kw>
<msg time="2026-04-13T02:58:12.518364" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.099128" elapsed="0.419282"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.521524" elapsed="0.000368"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:12.522048" elapsed="0.000159"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:12.522344" elapsed="0.000100"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:12.518729" elapsed="0.003767"/>
</kw>
<msg time="2026-04-13T02:58:12.522593" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:12.098076" elapsed="0.424544"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.523089" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:12.522828" elapsed="0.000313"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:12.523189" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:58:12.523354" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:12.096931" elapsed="0.426450"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.524158" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:12.523548" elapsed="0.000663"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:12.524351" elapsed="0.000320"/>
</kw>
<arg>${index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:58:11.303246" elapsed="1.221554"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-13T02:58:11.303047" elapsed="1.221787"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-13T02:58:08.968181" elapsed="3.556690"/>
</for>
<doc>This keyword cleansup export files of a cluster</doc>
<status status="PASS" start="2026-04-13T02:58:08.964148" elapsed="3.560787"/>
</kw>
<kw name="Schedule Export" owner="DaeximKeywords">
<if>
<branch type="IF" condition="${include}">
<kw name="Set Variable" owner="BuiltIn">
<var>${file}</var>
<arg>${EXPORT_INCLUDE_FILE}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:12.529413" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:12.529233" elapsed="0.000243"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.530016" level="INFO">${file} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json</msg>
<var>${file}</var>
<arg>${exclude}</arg>
<arg>${EXPORT_EXCLUDE_FILE}</arg>
<arg>${EXPORT_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:12.529653" elapsed="0.000391"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:12.529501" elapsed="0.000584"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:12.529210" elapsed="0.000897"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:58:12.530389" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:12.530601" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "${time}",
    "data-export-import:local-node-only": "${flag}"
   }
 }
</msg>
<var>${json}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:58:12.530240" elapsed="0.000405"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.531141" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "500",
    "data-export-import:local-node-only": "true"
   }
 }
</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-13T02:58:12.530789" elapsed="0.000381"/>
</kw>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.532035" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:12.531722" elapsed="0.000357"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.544519" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:12.544179" elapsed="0.000371"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:12.544606" elapsed="0.000055"/>
</return>
<msg time="2026-04-13T02:58:12.544790" 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-04-13T02:58:12.543810" elapsed="0.001005"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.547874" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:12.547586" elapsed="0.000336"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:12.550432" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:58:12.549953" elapsed="0.001063">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:58:12.548002" elapsed="0.003099">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:12.551278" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:12.551136" elapsed="0.000203"/>
</branch>
<status status="FAIL" start="2026-04-13T02:58:12.547978" elapsed="0.003384">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:58:12.551802" elapsed="0.000026"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:12.551880" elapsed="0.000019"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:58:12.545088" elapsed="0.006907">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:12.552053" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-13T02:58:12.543360" elapsed="0.008790">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:12.552329" elapsed="0.000021"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:12.552400" elapsed="0.000015"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:58:12.540848" elapsed="0.011648">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:12.532225" elapsed="0.020419"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:12.553956" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:12.553673" elapsed="0.000314"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:12.554774" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:12.557944" elapsed="0.000261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.558959" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:12.558345" elapsed="0.000667"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:12.559781" level="INFO">${conn_id} = 149</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:12.559157" elapsed="0.000651"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.561324" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:12.561464" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:12.560642" elapsed="0.000861"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.561744" elapsed="0.000626"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:12.564417" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:12.875211" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:10 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:12.563893" elapsed="0.311610"/>
</kw>
<msg time="2026-04-13T02:58:12.875660" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.562649" elapsed="0.313125"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:12.560014" elapsed="0.315991"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:12.876545" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:12.899250" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:12.899503" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:12.899673" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:12.876252" elapsed="0.023482"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:12.900093" elapsed="0.000640"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.901882" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:12.901112" elapsed="0.000875"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:12.902458" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:12.902168" elapsed="0.000400"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:12.902117" 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-04-13T02:58:12.903021" elapsed="0.000060"/>
</return>
<status status="PASS" start="2026-04-13T02:58:12.902780" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:12.902743" elapsed="0.000469"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:12.903288" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.919713" 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-04-13T02:58:12.920529" elapsed="0.000348"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:12.921033" elapsed="0.000105"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:12.904037" elapsed="0.017154"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:12.556862" elapsed="0.364422"/>
</kw>
<msg time="2026-04-13T02:58:12.921338" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.556146" elapsed="0.365245"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:12.555611" elapsed="0.365860"/>
</kw>
<msg time="2026-04-13T02:58:12.921511" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.555074" elapsed="0.366482"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.924375" elapsed="0.000600"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:12.925126" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:12.925409" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:12.921846" elapsed="0.003710"/>
</kw>
<msg time="2026-04-13T02:58:12.925666" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:12.554191" elapsed="0.371502"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.926122" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:12.925872" elapsed="0.000290"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:12.926207" elapsed="0.000032"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:12.553241" elapsed="0.373094"/>
</kw>
<msg time="2026-04-13T02:58:12.926423" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:12.552795" elapsed="0.373653"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:12.927786" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:12.927413" elapsed="0.000403"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:12.928561" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:12.931837" elapsed="0.000264"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.932863" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:12.932245" elapsed="0.000666"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:12.933543" level="INFO">${conn_id} = 152</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:12.933053" elapsed="0.000516"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:12.934922" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:12.935063" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:12.934244" elapsed="0.000858"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.935317" elapsed="0.000644"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:12.938031" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:13.235310" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:12 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:12.937405" elapsed="0.298125"/>
</kw>
<msg time="2026-04-13T02:58:13.235626" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.936219" elapsed="0.299524"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:12.933790" elapsed="0.302191"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:13.236503" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:13.248886" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:13.249155" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:13.249260" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:13.236206" elapsed="0.013109"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:13.249715" elapsed="0.000471"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.251366" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.250577" elapsed="0.000898"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:13.252048" elapsed="0.000050"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:13.251701" elapsed="0.000473"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.251605" elapsed="0.000623"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:13.252600" elapsed="0.000105"/>
</return>
<status status="PASS" start="2026-04-13T02:58:13.252353" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.252318" elapsed="0.000524"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:13.252923" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:13.272235" elapsed="0.000659"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:13.273082" elapsed="0.000162"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:13.273394" elapsed="0.000096"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:13.253620" elapsed="0.019921"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:12.930711" elapsed="0.343155"/>
</kw>
<msg time="2026-04-13T02:58:13.273922" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.930074" elapsed="0.343899"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:12.929545" elapsed="0.344506"/>
</kw>
<msg time="2026-04-13T02:58:13.274092" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:12.929073" elapsed="0.345063"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:13.276753" elapsed="0.000308"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:13.277207" elapsed="0.000144"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:13.277483" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:13.274408" elapsed="0.003264"/>
</kw>
<msg time="2026-04-13T02:58:13.277766" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:12.928025" elapsed="0.349766"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.278196" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.277950" elapsed="0.000287"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:13.278279" elapsed="0.000028"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:12.927025" elapsed="0.351377"/>
</kw>
<msg time="2026-04-13T02:58:13.278488" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:12.926601" elapsed="0.351911"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:13.279598" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:13.279327" elapsed="0.000310"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:13.280391" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:13.283572" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.284373" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.283995" elapsed="0.000423"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:13.284935" 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-04-13T02:58:13.284557" elapsed="0.000404"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.285920" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:13.285996" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:13.285582" elapsed="0.000438"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:13.286162" elapsed="0.000385"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:13.287833" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:13.687048" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:57:14 UTC 2026

  System load:  0.27               Processes:             129
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:13 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:13.287060" elapsed="0.400181"/>
</kw>
<msg time="2026-04-13T02:58:13.687425" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:13.286720" elapsed="0.400801"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:13.285201" elapsed="0.402456"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:13.688205" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:58:13.702120" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:13.702481" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:58:13.702583" 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-04-13T02:58:13.687896" elapsed="0.014775"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:13.703102" elapsed="0.000491"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.704667" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.703986" elapsed="0.000776"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:13.705237" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:13.704932" elapsed="0.000410"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.704881" elapsed="0.000512"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:13.705786" elapsed="0.000068"/>
</return>
<status status="PASS" start="2026-04-13T02:58:13.705507" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.705475" elapsed="0.000504"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:13.706052" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:13.711731" 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-04-13T02:58:13.712625" elapsed="0.000303"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:13.713128" elapsed="0.000147"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:13.706743" elapsed="0.006612"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:13.282562" elapsed="0.430932"/>
</kw>
<msg time="2026-04-13T02:58:13.713588" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:13.281831" elapsed="0.431870"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:13.281150" elapsed="0.432673"/>
</kw>
<msg time="2026-04-13T02:58:13.713890" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:13.280671" elapsed="0.433285"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:13.717773" elapsed="0.000326"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:13.718360" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:13.718655" 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-04-13T02:58:13.714393" elapsed="0.004412"/>
</kw>
<msg time="2026-04-13T02:58:13.718900" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:13.279869" elapsed="0.439057"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.719365" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.719115" elapsed="0.000301"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:13.719462" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:13.719623" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:13.278943" elapsed="0.440760"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.720110" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.719851" elapsed="0.000309"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:13.720294" elapsed="0.000299"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:58:12.531384" elapsed="1.189287"/>
</kw>
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.725830" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:13.725510" elapsed="0.000346"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:13.725901" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:13.726049" 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-04-13T02:58:13.725168" elapsed="0.000905"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.738884" level="INFO">/rests/operations/data-export-import:schedule-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.738613" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.739304" level="INFO"> {
   "input": {
    "data-export-import:run-at": "500",
    "data-export-import:local-node-only": "true"
   }
 }
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.739068" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.739743" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.739480" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.740173" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.739918" elapsed="0.000298"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:13.741008" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:58:13.740807" elapsed="0.000227"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:58:13.741340" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:58:13.741170" elapsed="0.000195"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:13.741499" elapsed="0.000225"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.742279" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.741928" elapsed="0.000412"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:58:13.742386" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:58:13.742553" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:58:13.740402" elapsed="0.002176"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:13.763113" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 path_url=/rests/operations/data-export-import:schedule-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node0mmvrrynycomnr51bovvak4y21.node0', 'Content-Length': '114', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body= {
   "input": {
    "data-export-import:run-at": "500",
    "data-export-import:local-node-only": "true"
   }
 }
 
 </msg>
<msg time="2026-04-13T02:58:13.763379" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '45'} 
 body={"data-export-import:output":{"result":true}} 
 </msg>
<msg time="2026-04-13T02:58:13.763667" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:58:13.746709" elapsed="0.017023"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:13.742695" elapsed="0.021148"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:13.764296" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:13.763906" elapsed="0.000543"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.742672" elapsed="0.021826"/>
</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-04-13T02:58:13.772254" level="INFO">{"data-export-import:output":{"result":true}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.766945" elapsed="0.005418"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:13.766447" elapsed="0.005993"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.766402" elapsed="0.006094"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.775249" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.773080" elapsed="0.002214"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:13.772651" elapsed="0.002677"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.772587" elapsed="0.002766"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.775951" 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-04-13T02:58:13.775517" elapsed="0.000461"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:13.776287" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:13.776049" elapsed="0.000295"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.776832" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:13.776514" elapsed="0.000344"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:13.776368" elapsed="0.000525"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.776031" elapsed="0.000883"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.777417" 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-04-13T02:58:13.777058" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:13.777740" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:13.777513" elapsed="0.000284"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.778258" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:13.777962" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:13.777821" elapsed="0.000498"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.777495" elapsed="0.000845"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:13.778480" elapsed="0.000362"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:13.779292" 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-04-13T02:58:13.778992" elapsed="0.000326"/>
</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-04-13T02:58:13.779456" elapsed="0.002246"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:58:13.765373" elapsed="0.016398"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:13.782034" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:13.781921" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.781902" elapsed="0.000200"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:58:13.784722" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:58:13.782237" elapsed="0.002514"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:58:13.784802" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:13.784971" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:58:13.735915" elapsed="0.049081"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:13.785062" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:58:13.785211" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:58:13.733436" elapsed="0.051800"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:13.785287" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:58:13.785435" level="INFO">${response_json} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_json}</var>
<arg>${SCHEDULE_EXPORT_URL}</arg>
<arg>${json}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:13.724734" elapsed="0.060726"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.785904" level="INFO">{
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.785613" elapsed="0.000338"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>500</arg>
<arg>${FALSE}</arg>
<arg>${EMPTY}</arg>
<arg>${EMPTY}</arg>
<arg>true</arg>
<doc>Schedule Export job</doc>
<status status="PASS" start="2026-04-13T02:58:12.525226" elapsed="1.260782"/>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.793445" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:13.793144" elapsed="0.000328"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:13.793518" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:13.793682" 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-04-13T02:58:13.792814" elapsed="0.000893"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.806462" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.806203" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.806912" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.806667" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.807344" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.807095" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.807794" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.807528" elapsed="0.000310"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:13.808678" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:58:13.808465" elapsed="0.000239"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:58:13.809014" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:58:13.808844" elapsed="0.000194"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:13.809177" elapsed="0.000223"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.809806" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.809543" elapsed="0.000306"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:58:13.809892" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:13.810047" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:58:13.808028" elapsed="0.002044"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:13.820257" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node0mmvrrynycomnr51bovvak4y21.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:13.820654" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '369'} 
 body={"data-export-import:output":{"run-at":"2026-04-13T02:58:18Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:13Z","status":"scheduled"}]}} 
 </msg>
<msg time="2026-04-13T02:58:13.820757" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:58:13.812229" elapsed="0.008554"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:13.810149" elapsed="0.010681"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:13.821001" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:13.820857" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.810129" elapsed="0.011050"/>
</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-04-13T02:58:13.829406" level="INFO">{"data-export-import:output":{"run-at":"2026-04-13T02:58:18Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:13Z","status":"scheduled"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.823620" elapsed="0.005896"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:13.823128" elapsed="0.006465"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.823082" elapsed="0.006598"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.834171" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.830390" elapsed="0.003829"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:13.829809" elapsed="0.004446"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.829773" elapsed="0.004508"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.834878" 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-04-13T02:58:13.834443" elapsed="0.000463"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:13.835199" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:13.834978" elapsed="0.000278"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.835746" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:13.835425" elapsed="0.000349"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:13.835282" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.834959" elapsed="0.000872"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.836372" 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-04-13T02:58:13.835975" elapsed="0.000424"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:13.836703" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:13.836470" elapsed="0.000294"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.837232" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:13.836933" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:13.836789" elapsed="0.000505"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.836451" elapsed="0.000865"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:13.837460" elapsed="0.000372"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:13.838279" 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-04-13T02:58:13.837987" elapsed="0.000459"/>
</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-04-13T02:58:13.838587" elapsed="0.002228"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:58:13.822038" elapsed="0.018842"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:13.841063" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:13.840955" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.840936" elapsed="0.000246"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:58:13.843851" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:58:13.841318" elapsed="0.002562"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:58:13.843931" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:13.844093" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:58:13.803570" elapsed="0.040613"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:13.844259" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:13.844422" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:58:13.801106" elapsed="0.043343"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:13.844499" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:58:13.844665" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:13.790467" elapsed="0.054226"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.845098" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.171.185:2550",
    "status": "skipped"
   }
  ],
  "run-at": "2026-04-13T02:58:18Z",
  "status": "scheduled"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.844844" elapsed="0.000302"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.845582" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:58:13.845283" elapsed="0.000325"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:13.846191" elapsed="0.000326"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${config_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:13.847348" elapsed="0.000371"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${models_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:13.847864" elapsed="0.000384"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${operational_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:13.848399" elapsed="0.000346"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.849090" level="INFO">Did not Find all Json Files</msg>
<arg>Did not Find all Json Files</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.848886" elapsed="0.000247"/>
</kw>
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="PASS" start="2026-04-13T02:58:13.846913" elapsed="0.002274"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:13.846590" elapsed="0.002627"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="NOT RUN" start="2026-04-13T02:58:13.849427" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:13.849241" elapsed="0.000253"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.846572" elapsed="0.002944"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="PASS" start="2026-04-13T02:58:13.845844" elapsed="0.003721"/>
</kw>
<arg>${EXPORT_SCHEDULED_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="PASS" start="2026-04-13T02:58:13.786246" elapsed="0.063392"/>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.859504" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:13.859086" elapsed="0.000456"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:13.859607" elapsed="0.000061"/>
</return>
<msg time="2026-04-13T02:58:13.859891" 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-04-13T02:58:13.858593" elapsed="0.001334"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.872914" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.872663" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.873346" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.873107" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.873787" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.873524" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.874205" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.873966" elapsed="0.000281"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:13.875025" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:58:13.874835" elapsed="0.000219"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:58:13.875362" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:58:13.875193" elapsed="0.000194"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:13.875521" elapsed="0.000203"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:13.876109" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:13.875863" elapsed="0.000330"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:58:13.876238" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:13.876394" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:58:13.874431" elapsed="0.001988"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:14.744751" level="INFO">POST Request : url=http://10.30.170.138:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:14.745089" level="INFO">POST Response : url=http://10.30.170.138:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01vjcm8d5ru5iye0sra3u06jpk0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Sun, 12-Apr-2026 02:58:14 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Content-Type': 'application/yang-data+json', 'Content-Length': '369'} 
 body={"data-export-import:output":{"run-at":"2026-04-13T02:58:18Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:13Z","status":"scheduled"}]}} 
 </msg>
<msg time="2026-04-13T02:58:14.745277" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:58:13.878465" elapsed="0.866852"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:13.876492" elapsed="0.868905"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:14.745730" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:14.745443" elapsed="0.000388"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:13.876474" elapsed="0.869388"/>
</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-04-13T02:58:14.751200" level="INFO">{"data-export-import:output":{"run-at":"2026-04-13T02:58:18Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:13Z","status":"scheduled"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:14.747514" elapsed="0.003762"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:14.747094" elapsed="0.004234"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:14.747065" elapsed="0.004446"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.755036" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:14.751922" elapsed="0.003177"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:14.751595" elapsed="0.003552"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:14.751571" elapsed="0.003610"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.756006" 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-04-13T02:58:14.755430" elapsed="0.000615"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:14.756451" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:14.756144" elapsed="0.000389"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.757363" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:14.756906" elapsed="0.000486"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:14.756568" elapsed="0.000861"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:14.756119" elapsed="0.001332"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.757981" 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-04-13T02:58:14.757594" elapsed="0.000414"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:14.758298" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:14.758079" elapsed="0.000277"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.758839" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:14.758523" elapsed="0.000343"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:14.758380" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:14.758061" elapsed="0.000862"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:14.759062" elapsed="0.000349"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:14.759870" 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-04-13T02:58:14.759562" 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-04-13T02:58:14.760036" elapsed="0.002219"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:58:14.746399" elapsed="0.015923"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:14.762509" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:14.762398" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:14.762379" elapsed="0.000199"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:58:14.765250" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:58:14.762721" elapsed="0.002558"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:58:14.765328" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:14.765492" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:58:13.870092" elapsed="0.895427"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:14.765587" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:58:14.765754" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:58:13.867581" elapsed="0.898199"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:14.765831" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:58:14.765980" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:13.855538" elapsed="0.910474"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.766410" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.171.185:2550",
    "status": "skipped"
   }
  ],
  "run-at": "2026-04-13T02:58:18Z",
  "status": "scheduled"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:14.766160" elapsed="0.000298"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.766914" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:58:14.766595" elapsed="0.000384"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:14.767572" elapsed="0.000431"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${config_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:14.768861" elapsed="0.000344"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${models_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:14.769345" elapsed="0.000345"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${operational_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:14.769827" elapsed="0.000329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.770507" level="INFO">Did not Find all Json Files</msg>
<arg>Did not Find all Json Files</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:14.770301" elapsed="0.000250"/>
</kw>
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="PASS" start="2026-04-13T02:58:14.768386" elapsed="0.002220"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:14.768078" elapsed="0.002573"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="NOT RUN" start="2026-04-13T02:58:14.770848" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:14.770678" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:14.768059" elapsed="0.002867"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="PASS" start="2026-04-13T02:58:14.767214" elapsed="0.003758"/>
</kw>
<arg>${EXPORT_SKIPPED_STATUS}</arg>
<arg>${SECOND_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="PASS" start="2026-04-13T02:58:13.849871" elapsed="0.921156"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.778953" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:14.778650" elapsed="0.000330"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:14.779029" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:14.779177" 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-04-13T02:58:14.778302" elapsed="0.000900"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.791895" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:14.791645" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.792314" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:14.792078" elapsed="0.000277"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.792779" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:14.792488" elapsed="0.000335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.793194" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:14.792957" elapsed="0.000279"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:14.794018" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:58:14.793827" elapsed="0.000217"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:58:14.794349" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:58:14.794182" elapsed="0.000192"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:14.794507" elapsed="0.000202"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.795094" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:14.794848" elapsed="0.000289"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:58:14.795179" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:14.795332" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:58:14.793422" elapsed="0.001935"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:14.807530" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node0mmvrrynycomnr51bovvak4y21.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:14.807733" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '369'} 
 body={"data-export-import:output":{"run-at":"2026-04-13T02:58:18Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:13Z","status":"scheduled"}]}} 
 </msg>
<msg time="2026-04-13T02:58:14.807924" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:58:14.797419" elapsed="0.010543"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:14.795427" elapsed="0.012599"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:14.808262" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:14.808061" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:14.795409" elapsed="0.012976"/>
</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-04-13T02:58:14.815833" level="INFO">{"data-export-import:output":{"run-at":"2026-04-13T02:58:18Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:13Z","status":"scheduled"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:14.810294" elapsed="0.005652"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:14.809836" elapsed="0.006187"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:14.809793" elapsed="0.006286"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.821158" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:14.816718" elapsed="0.004489"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:14.816208" elapsed="0.005039"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:14.816170" elapsed="0.005102"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.821967" 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-04-13T02:58:14.821438" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:14.822285" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:14.822066" elapsed="0.000277"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.822846" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:14.822528" elapsed="0.000344"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:14.822367" elapsed="0.000541"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:14.822048" elapsed="0.000881"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.823439" 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-04-13T02:58:14.823070" elapsed="0.000395"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:14.823766" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:14.823534" elapsed="0.000289"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.824284" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:14.823987" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:14.823848" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:14.823517" elapsed="0.000849"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:14.824503" elapsed="0.000377"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:14.825313" 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-04-13T02:58:14.825030" elapsed="0.000309"/>
</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-04-13T02:58:14.825478" elapsed="0.002228"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:58:14.808926" elapsed="0.018845"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:14.827955" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:14.827846" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:14.827826" elapsed="0.000197"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:58:14.830686" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:58:14.828153" elapsed="0.002562"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:58:14.830764" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:14.830925" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:58:14.789062" elapsed="0.041889"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:14.831072" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:14.831225" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:58:14.786583" elapsed="0.044669"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:14.831304" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:58:14.831591" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:14.776153" elapsed="0.055464"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.832037" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.171.185:2550",
    "status": "skipped"
   }
  ],
  "run-at": "2026-04-13T02:58:18Z",
  "status": "scheduled"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:14.831783" elapsed="0.000302"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.832529" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:58:14.832222" elapsed="0.000334"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<msg time="2026-04-13T02:58:14.833567" level="FAIL">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.171.185:2550",
    "status": "skipped"
   }
  ],
  "run-at": "2026-04-13T02:58:18Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</msg>
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="FAIL" start="2026-04-13T02:58:14.833181" elapsed="0.000479">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.171.185:2550",
    "status": "skipped"
   }
  ],
  "run-at": "2026-04-13T02:58:18Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:58:14.833922" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:14.833748" elapsed="0.000232"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="NOT RUN" start="2026-04-13T02:58:14.834163" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:14.834005" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-13T02:58:14.833729" elapsed="0.000510"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="FAIL" start="2026-04-13T02:58:14.832828" elapsed="0.001525">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.171.185:2550",
    "status": "skipped"
   }
  ],
  "run-at": "2026-04-13T02:58:18Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<arg>${EXPORT_COMPLETE_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="FAIL" start="2026-04-13T02:58:14.771707" elapsed="0.062757">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.171.185:2550",
    "status": "skipped"
   }
  ],
  "run-at": "2026-04-13T02:58:18Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.848375" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:19.847830" elapsed="0.000598"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:19.848494" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T02:58:19.848693" 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-04-13T02:58:19.847251" elapsed="0.001470"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.862177" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:19.861863" elapsed="0.000373"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.862648" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:19.862386" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.863113" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:19.862834" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.863575" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:19.863305" elapsed="0.000314"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:19.864447" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:58:19.864237" elapsed="0.000240"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:58:19.864828" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:58:19.864650" elapsed="0.000203"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:19.864991" elapsed="0.000206"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.865595" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:19.865343" elapsed="0.000312"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:58:19.865706" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T02:58:19.865884" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:58:19.863841" elapsed="0.002068"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:19.877534" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node0mmvrrynycomnr51bovvak4y21.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:19.878525" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '518'} 
 body={"data-export-import:output":{"status":"complete","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:18Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"}]}} 
 </msg>
<msg time="2026-04-13T02:58:19.878808" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:58:19.868045" elapsed="0.010823"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:19.865990" elapsed="0.012987"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:19.879412" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:19.879039" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:19.865970" elapsed="0.013640"/>
</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-04-13T02:58:19.886740" level="INFO">{"data-export-import:output":{"status":"complete","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:13Z","status":"skipped"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:18Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:19.882045" elapsed="0.004770"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:19.881487" elapsed="0.005377"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:19.881443" elapsed="0.005457"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.890514" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:19.887271" elapsed="0.003308"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:19.886981" elapsed="0.003664"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:19.886957" elapsed="0.003725"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.891498" 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-04-13T02:58:19.890906" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:19.891963" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:19.891654" elapsed="0.000389"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.892674" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:19.892275" elapsed="0.000427"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:19.892077" elapsed="0.000662"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:19.891609" elapsed="0.001152"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.893285" 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-04-13T02:58:19.892905" elapsed="0.000407"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:19.893600" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:19.893382" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.894139" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:19.893844" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:19.893699" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:19.893364" elapsed="0.000859"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:19.894364" elapsed="0.000364"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:19.895167" 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-04-13T02:58:19.894877" elapsed="0.000316"/>
</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-04-13T02:58:19.895332" elapsed="0.002216"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:58:19.880429" elapsed="0.017185"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:19.897816" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:19.897705" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:19.897685" elapsed="0.000200"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:58:19.900591" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:58:19.898014" elapsed="0.002607"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:58:19.900699" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T02:58:19.900905" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:58:19.859146" elapsed="0.041787"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:19.901000" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:19.901153" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:58:19.856466" elapsed="0.044713"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:19.901230" elapsed="0.000024"/>
</return>
<msg time="2026-04-13T02:58:19.901383" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:19.844043" elapsed="0.057366"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.901835" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:58:18Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.170.156:2550",
    "status": "complete"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.170.138:2550",
    "status": "skipped"
   },
   {
    "last-change": "2026-04-13T02:58:13Z",
    "node-name": "10.30.171.185:2550",
    "status": "skipped"
   }
  ],
  "status": "complete"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:19.901556" elapsed="0.000328"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.902319" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:58:19.902021" elapsed="0.000373"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:19.903014" elapsed="0.000333"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:58:19.903762" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:19.903435" elapsed="0.000387"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${config_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:19.904440" elapsed="0.000348"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${models_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:19.904931" elapsed="0.000336"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${operational_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:19.905408" elapsed="0.000344"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.906110" level="INFO">Found all Json Files</msg>
<arg>Found all Json Files</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:19.905894" elapsed="0.000261"/>
</kw>
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="PASS" start="2026-04-13T02:58:19.904009" elapsed="0.002212"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:19.903847" elapsed="0.002406"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:19.903416" elapsed="0.002858"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="PASS" start="2026-04-13T02:58:19.902644" elapsed="0.003675"/>
</kw>
<arg>${EXPORT_COMPLETE_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="PASS" start="2026-04-13T02:58:19.835307" elapsed="0.071064"/>
</kw>
<arg>10 sec</arg>
<arg>5 sec</arg>
<arg>DaeximKeywords.Verify Export Status</arg>
<arg>${EXPORT_COMPLETE_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-13T02:58:14.771177" elapsed="5.135245"/>
</kw>
<kw name="Verify Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.907305" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:19.906997" elapsed="0.000334"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:19.908266" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:19.908001" elapsed="0.000291"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:19.909235" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:19.912212" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.913049" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:19.912667" elapsed="0.000428"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:19.913606" level="INFO">${conn_id} = 158</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:19.913238" elapsed="0.000409"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:19.914559" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:19.914655" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:19.914291" elapsed="0.000390"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:19.914823" elapsed="0.000318"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:19.916267" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:20.506782" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:13 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:19.915705" elapsed="0.591232"/>
</kw>
<msg time="2026-04-13T02:58:20.507023" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:19.915332" elapsed="0.591776"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:19.913908" elapsed="0.593311"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:20.507754" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json'.</msg>
<msg time="2026-04-13T02:58:20.520285" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:20.520554" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 3117 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<msg time="2026-04-13T02:58:20.520700" 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-04-13T02:58:20.507442" elapsed="0.013317"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:20.521120" elapsed="0.000468"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:20.522664" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:20.521999" elapsed="0.000769"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:20.523261" elapsed="0.000047"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:20.522945" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:20.522895" elapsed="0.000547"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:20.523977" elapsed="0.000065"/>
</return>
<status status="PASS" start="2026-04-13T02:58:20.523563" elapsed="0.000559"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:20.523530" elapsed="0.000646"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:20.524251" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:20.528078" 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-04-13T02:58:20.528787" elapsed="0.000227"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:20.529204" elapsed="0.000142"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:20.524773" elapsed="0.004651"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:19.911149" elapsed="0.618406"/>
</kw>
<msg time="2026-04-13T02:58:20.529653" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:19.910553" elapsed="0.619178"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:19.910022" elapsed="0.619821"/>
</kw>
<msg time="2026-04-13T02:58:20.529901" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:19.909504" elapsed="0.620458"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:20.533746" elapsed="0.000459"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:20.534515" elapsed="0.000409"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:20.535240" elapsed="0.000218"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:20.530351" elapsed="0.005221"/>
</kw>
<msg time="2026-04-13T02:58:20.535872" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 3117 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:19.908491" elapsed="0.627549"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:20.536716" level="INFO">-rw-rw-r-- 1 jenkins jenkins 3117 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:20.536438" elapsed="0.000324"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:20.536811" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:20.536971" level="INFO">${cfg} = -rw-rw-r-- 1 jenkins jenkins 3117 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<var>${cfg}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_DATA_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:19.907569" elapsed="0.629427"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:20.537524" level="INFO">-rw-rw-r-- 1 jenkins jenkins 3117 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<arg>${cfg}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:20.537149" elapsed="0.000457"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${cfg}</arg>
<arg>.*${EXP_DATA_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:20.537767" elapsed="0.000415"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:20.539113" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:20.538841" elapsed="0.000298"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:20.539970" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:20.542995" elapsed="0.000260"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:20.544056" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:20.543392" elapsed="0.000717"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:20.544689" level="INFO">${conn_id} = 161</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:20.544266" elapsed="0.000453"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:20.545610" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:20.545721" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:20.545323" elapsed="0.000425"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:20.545899" elapsed="0.000366"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:20.547438" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:20.910075" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:20 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:20.546853" elapsed="0.363378"/>
</kw>
<msg time="2026-04-13T02:58:20.910328" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:20.546460" elapsed="0.364047"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:20.544927" elapsed="0.365713"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:20.911145" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json'.</msg>
<msg time="2026-04-13T02:58:20.923763" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:20.924037" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<msg time="2026-04-13T02:58:20.924138" 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-04-13T02:58:20.910882" elapsed="0.013307"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:20.924523" elapsed="0.000544"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:20.926141" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:20.925440" elapsed="0.000794"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:20.926744" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:20.926414" elapsed="0.000443"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:20.926360" elapsed="0.000549"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:20.927260" elapsed="0.000057"/>
</return>
<status status="PASS" start="2026-04-13T02:58:20.927025" elapsed="0.000365"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:20.926992" elapsed="0.000451"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:20.927517" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:20.933602" 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-04-13T02:58:20.934288" elapsed="0.000222"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:20.934716" elapsed="0.000136"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:20.928267" elapsed="0.006658"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:20.541944" elapsed="0.393108"/>
</kw>
<msg time="2026-04-13T02:58:20.935126" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:20.541363" elapsed="0.393833"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:20.540792" elapsed="0.394512"/>
</kw>
<msg time="2026-04-13T02:58:20.935361" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:20.540255" elapsed="0.395166"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:20.938335" elapsed="0.000324"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:20.938810" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:20.939086" elapsed="0.000093"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:20.935818" elapsed="0.003411"/>
</kw>
<msg time="2026-04-13T02:58:20.939318" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:20.539389" elapsed="0.399953"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:20.939769" level="INFO">-rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:20.939505" elapsed="0.000309"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:20.939857" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:20.940022" level="INFO">${mdl} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<var>${mdl}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${MODELS_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:20.538409" elapsed="0.401639"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:20.940432" level="INFO">-rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<arg>${mdl}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:20.940189" elapsed="0.000287"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${mdl}</arg>
<arg>.*${MODELS_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:20.940680" elapsed="0.000335"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:20.941959" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:20.941689" elapsed="0.000297"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:20.942723" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:20.945528" elapsed="0.000275"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:20.946312" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:20.945938" elapsed="0.000421"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:20.946879" 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-04-13T02:58:20.946498" elapsed="0.000407"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:20.947776" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:20.947851" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:20.947484" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:20.948102" elapsed="0.000589"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:20.949796" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:21.270477" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:20 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:20.949198" elapsed="0.321460"/>
</kw>
<msg time="2026-04-13T02:58:21.270749" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:20.948851" elapsed="0.321985"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:20.947107" elapsed="0.323844"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:21.271426" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json'.</msg>
<msg time="2026-04-13T02:58:21.284281" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:21.284601" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 34832 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<msg time="2026-04-13T02:58:21.284744" 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-04-13T02:58:21.271180" elapsed="0.013618"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:21.285203" elapsed="0.000563"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:21.286908" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:21.286131" elapsed="0.000873"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:21.287462" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:21.287174" elapsed="0.000394"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:21.287125" 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-04-13T02:58:21.288002" elapsed="0.000066"/>
</return>
<status status="PASS" start="2026-04-13T02:58:21.287767" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:21.287733" elapsed="0.000488"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:21.288298" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:21.293818" 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-04-13T02:58:21.294507" elapsed="0.000244"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:21.294941" elapsed="0.000137"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:21.289085" elapsed="0.006066"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:20.944519" elapsed="0.350763"/>
</kw>
<msg time="2026-04-13T02:58:21.295360" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:20.943989" elapsed="0.351445"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:20.943456" elapsed="0.352089"/>
</kw>
<msg time="2026-04-13T02:58:21.295602" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:20.942987" elapsed="0.352696"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:21.299456" 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-04-13T02:58:21.300205" elapsed="0.000237"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:21.300582" elapsed="0.000116"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:21.296071" elapsed="0.004680"/>
</kw>
<msg time="2026-04-13T02:58:21.300846" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 34832 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:20.942185" elapsed="0.358686"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:21.301294" level="INFO">-rw-rw-r-- 1 jenkins jenkins 34832 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:21.301038" elapsed="0.000302"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:21.301384" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:21.301539" level="INFO">${opr} = -rw-rw-r-- 1 jenkins jenkins 34832 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<var>${opr}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_OPER_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:20.941231" elapsed="0.360334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:21.301987" level="INFO">-rw-rw-r-- 1 jenkins jenkins 34832 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<arg>${opr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:21.301733" elapsed="0.000300"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${opr}</arg>
<arg>.*${EXP_OPER_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:21.302173" elapsed="0.000345"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify if the backedup files are present in the controller</doc>
<status status="PASS" start="2026-04-13T02:58:19.906684" elapsed="1.395898"/>
</kw>
<kw name="Verify Export Files Not Present" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:21.303527" level="INFO">${host_index} = 3</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:21.303195" elapsed="0.000359"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:21.304536" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:21.304224" elapsed="0.000344"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:21.305593" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:21.308591" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:21.309401" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:21.309021" elapsed="0.000426"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:21.309976" level="INFO">${conn_id} = 167</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:21.309589" elapsed="0.000413"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:21.310882" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:21.310958" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:21.310583" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:21.311121" elapsed="0.000317"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:21.312534" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:21.902795" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:12 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:21.311948" elapsed="0.591027"/>
</kw>
<msg time="2026-04-13T02:58:21.903085" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:21.311590" elapsed="0.591598"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:21.310206" elapsed="0.593128"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:21.903973" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json'.</msg>
<msg time="2026-04-13T02:58:21.917716" level="INFO">Command exited with return code 2.</msg>
<msg time="2026-04-13T02:58:21.918183" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:21.918299" level="INFO">${stderr} = ls: cannot access '/tmp/karaf-0.24.0/daexim/odl_backup_config.json': No such file or directory</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:21.903621" elapsed="0.014740"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:21.918927" elapsed="0.000729"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:21.921278" level="INFO">ls: cannot access '/tmp/karaf-0.24.0/daexim/odl_backup_config.json': No such file or directory</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:21.920052" elapsed="0.001335"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:21.921932" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:21.921575" elapsed="0.000473"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:21.921519" elapsed="0.000582"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:21.922461" elapsed="0.000072"/>
</return>
<status status="PASS" start="2026-04-13T02:58:21.922220" elapsed="0.000387"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:21.922187" elapsed="0.000508"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:21.922907" elapsed="0.000036"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:21.929027" elapsed="0.000586"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:21.929783" elapsed="0.000173"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:21.930091" elapsed="0.000100"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:21.923622" elapsed="0.006625"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:21.307524" elapsed="0.622820"/>
</kw>
<msg time="2026-04-13T02:58:21.930404" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:21.306974" elapsed="0.623491"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:21.306435" elapsed="0.624115"/>
</kw>
<msg time="2026-04-13T02:58:21.930592" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:21.305909" elapsed="0.624743"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:21.933303" elapsed="0.000312"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:21.933781" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:21.934059" 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-04-13T02:58:21.930936" elapsed="0.003271"/>
</kw>
<msg time="2026-04-13T02:58:21.934302" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:21.304783" elapsed="0.629545"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:21.934758" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:21.934492" elapsed="0.000308"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:21.934843" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:21.934996" level="INFO">${cfg} = </msg>
<var>${cfg}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_DATA_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:21.303789" elapsed="0.631232"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:21.935409" level="INFO"/>
<arg>${cfg}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:21.935166" elapsed="0.000284"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${cfg}</arg>
<arg>.*${EXP_DATA_FILE}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:21.935589" elapsed="0.000361"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:21.936888" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:21.936595" elapsed="0.000319"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:21.937672" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:21.940539" elapsed="0.000525"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:21.941591" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:21.941207" elapsed="0.000447"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:21.942172" level="INFO">${conn_id} = 170</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:21.941799" elapsed="0.000399"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:21.943080" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:21.943156" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:21.942801" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:21.943322" elapsed="0.000336"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:21.944768" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:22.261168" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:21 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:21.944157" elapsed="0.317155"/>
</kw>
<msg time="2026-04-13T02:58:22.261397" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:21.943815" elapsed="0.317664"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:21.942400" elapsed="0.319187"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:22.262059" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json'.</msg>
<msg time="2026-04-13T02:58:22.274217" level="INFO">Command exited with return code 2.</msg>
<msg time="2026-04-13T02:58:22.274498" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:22.274603" level="INFO">${stderr} = ls: cannot access '/tmp/karaf-0.24.0/daexim/odl_backup_models.json': No such file or directory</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:22.261825" elapsed="0.012878"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:22.275096" elapsed="0.000493"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:22.276922" level="INFO">ls: cannot access '/tmp/karaf-0.24.0/daexim/odl_backup_models.json': No such file or directory</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:22.276154" elapsed="0.000880"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:22.277534" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:22.277221" elapsed="0.000467"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:22.277167" elapsed="0.000580"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:22.278144" elapsed="0.000084"/>
</return>
<status status="PASS" start="2026-04-13T02:58:22.277878" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:22.277840" elapsed="0.000536"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:22.278459" elapsed="0.000035"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:22.283764" 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-04-13T02:58:22.284448" elapsed="0.000273"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:22.284915" 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-04-13T02:58:22.279217" elapsed="0.005913"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:21.939499" elapsed="0.345763"/>
</kw>
<msg time="2026-04-13T02:58:22.285341" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:21.938944" elapsed="0.346546"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:21.938416" elapsed="0.347192"/>
</kw>
<msg time="2026-04-13T02:58:22.285690" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:21.937942" elapsed="0.347813"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:22.289607" 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-04-13T02:58:22.290324" elapsed="0.000206"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:22.290736" elapsed="0.000138"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:22.286148" elapsed="0.004798"/>
</kw>
<msg time="2026-04-13T02:58:22.291073" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:21.937117" elapsed="0.353990"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:22.291693" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:22.291328" elapsed="0.000422"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:22.291810" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T02:58:22.292019" level="INFO">${mdl} = </msg>
<var>${mdl}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${MODELS_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:21.936174" elapsed="0.355878"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:22.292584" level="INFO"/>
<arg>${mdl}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:22.292249" elapsed="0.000411"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${mdl}</arg>
<arg>.*${MODELS_FILE}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:22.292881" elapsed="0.000467"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:22.294332" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:22.294029" elapsed="0.000331"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:22.295158" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:22.298032" elapsed="0.000277"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:22.298850" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:22.298446" elapsed="0.000452"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:22.299461" level="INFO">${conn_id} = 173</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:22.299040" elapsed="0.000467"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:22.300411" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:22.300514" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:22.300129" elapsed="0.000418"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:22.300745" elapsed="0.000539"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:22.302534" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:22.614441" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:22 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:22.301973" elapsed="0.312633"/>
</kw>
<msg time="2026-04-13T02:58:22.614718" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:22.301481" elapsed="0.313321"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:22.299751" elapsed="0.315162"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:22.615375" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json'.</msg>
<msg time="2026-04-13T02:58:22.628115" level="INFO">Command exited with return code 2.</msg>
<msg time="2026-04-13T02:58:22.628291" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:22.628371" level="INFO">${stderr} = ls: cannot access '/tmp/karaf-0.24.0/daexim/odl_backup_operational.json': No such file or directory</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:22.615136" elapsed="0.013281"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:22.628696" elapsed="0.000406"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:22.630075" level="INFO">ls: cannot access '/tmp/karaf-0.24.0/daexim/odl_backup_operational.json': No such file or directory</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:22.629374" elapsed="0.000822"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:22.630740" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:22.630401" elapsed="0.000456"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:22.630346" elapsed="0.000564"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:22.631264" elapsed="0.000060"/>
</return>
<status status="PASS" start="2026-04-13T02:58:22.631027" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:22.630993" elapsed="0.000458"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:22.631526" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:22.637618" elapsed="0.000345"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:22.638112" elapsed="0.000160"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:22.638403" elapsed="0.000097"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:22.632218" elapsed="0.006336"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:22.297000" elapsed="0.341660"/>
</kw>
<msg time="2026-04-13T02:58:22.638715" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:22.296434" elapsed="0.342332"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:22.295923" elapsed="0.342921"/>
</kw>
<msg time="2026-04-13T02:58:22.638884" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:22.295426" elapsed="0.343503"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:22.641590" elapsed="0.000341"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:22.642080" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:22.642356" elapsed="0.000114"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:22.639203" elapsed="0.003329"/>
</kw>
<msg time="2026-04-13T02:58:22.642704" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:22.294586" elapsed="0.348144"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:22.643143" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:22.642894" elapsed="0.000290"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:22.643227" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:22.643379" level="INFO">${opr} = </msg>
<var>${opr}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_OPER_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:22.293604" elapsed="0.349799"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:22.643957" level="INFO"/>
<arg>${opr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:22.643546" elapsed="0.000458"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${opr}</arg>
<arg>.*${EXP_OPER_FILE}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:22.644140" elapsed="0.000340"/>
</kw>
<arg>${THIRD_CONTROLLER_INDEX}</arg>
<doc>Verify if the backedup files are not present in the controller</doc>
<status status="PASS" start="2026-04-13T02:58:21.302842" elapsed="1.341714"/>
</kw>
<kw name="Verify Export Files Not Present" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:22.645470" level="INFO">${host_index} = 2</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:22.645158" elapsed="0.000339"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:22.646829" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:22.646290" elapsed="0.000569"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:22.647642" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:22.650699" elapsed="0.000256"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:22.651504" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:22.651088" elapsed="0.000463"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:22.652153" level="INFO">${conn_id} = 176</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:22.651719" elapsed="0.000461"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:22.653140" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:22.653227" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:22.652787" elapsed="0.000466"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:22.653402" elapsed="0.000359"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:22.654891" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:23.233066" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:11 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:22.654263" elapsed="0.579121"/>
</kw>
<msg time="2026-04-13T02:58:23.233477" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:22.653918" elapsed="0.579644"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:22.652384" elapsed="0.581306"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:23.234176" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json'.</msg>
<msg time="2026-04-13T02:58:23.246175" level="INFO">Command exited with return code 2.</msg>
<msg time="2026-04-13T02:58:23.246425" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:23.246521" level="INFO">${stderr} = ls: cannot access '/tmp/karaf-0.24.0/daexim/odl_backup_config.json': No such file or directory</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:23.233916" elapsed="0.012658"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:23.246965" elapsed="0.000474"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.248474" level="INFO">ls: cannot access '/tmp/karaf-0.24.0/daexim/odl_backup_config.json': No such file or directory</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:23.247856" elapsed="0.000718"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:23.249076" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:23.248784" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:23.248731" elapsed="0.000569"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:23.249612" elapsed="0.000055"/>
</return>
<status status="PASS" start="2026-04-13T02:58:23.249420" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:23.249386" elapsed="0.000364"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:23.249796" elapsed="0.000020"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:23.253526" 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-04-13T02:58:23.254245" elapsed="0.000219"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:23.254672" elapsed="0.000137"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:23.250220" elapsed="0.004661"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:22.649589" elapsed="0.605417"/>
</kw>
<msg time="2026-04-13T02:58:23.255081" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:22.649049" elapsed="0.606104"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:22.648419" elapsed="0.606847"/>
</kw>
<msg time="2026-04-13T02:58:23.255324" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:22.647915" elapsed="0.607473"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:23.259069" elapsed="0.000455"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:23.259756" elapsed="0.000202"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:23.260152" elapsed="0.000131"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:23.255796" elapsed="0.004557"/>
</kw>
<msg time="2026-04-13T02:58:23.260483" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:22.647084" elapsed="0.613442"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.261182" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:23.260792" elapsed="0.000512"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:23.261366" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T02:58:23.261566" level="INFO">${cfg} = </msg>
<var>${cfg}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_DATA_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:22.645729" elapsed="0.615862"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.261997" level="INFO"/>
<arg>${cfg}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:23.261753" elapsed="0.000341"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${cfg}</arg>
<arg>.*${EXP_DATA_FILE}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:23.262232" elapsed="0.000337"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:23.263553" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:23.263246" elapsed="0.000334"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:23.264445" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:23.267835" elapsed="0.000260"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.268613" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:23.268232" elapsed="0.000445"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:23.269189" level="INFO">${conn_id} = 179</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:23.268821" elapsed="0.000434"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.270149" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:23.270225" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:23.269871" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:23.270391" elapsed="0.000335"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:23.271822" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:23.583658" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:23 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:23.271220" elapsed="0.312586"/>
</kw>
<msg time="2026-04-13T02:58:23.583891" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:23.270881" elapsed="0.313090"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:23.269464" elapsed="0.314619"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:23.584547" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json'.</msg>
<msg time="2026-04-13T02:58:23.597521" level="INFO">Command exited with return code 2.</msg>
<msg time="2026-04-13T02:58:23.597834" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:23.597940" level="INFO">${stderr} = ls: cannot access '/tmp/karaf-0.24.0/daexim/odl_backup_models.json': No such file or directory</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:23.584305" elapsed="0.013691"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:23.598384" elapsed="0.000604"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.600232" level="INFO">ls: cannot access '/tmp/karaf-0.24.0/daexim/odl_backup_models.json': No such file or directory</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:23.599390" elapsed="0.000956"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:23.600880" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:23.600533" elapsed="0.000463"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:23.600479" elapsed="0.000574"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:23.601497" elapsed="0.000074"/>
</return>
<status status="PASS" start="2026-04-13T02:58:23.601185" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:23.601147" elapsed="0.000604"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:23.601835" elapsed="0.000034"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:23.607534" elapsed="0.000460"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:23.608206" elapsed="0.000210"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:23.608584" 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-04-13T02:58:23.602565" elapsed="0.006212"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:23.266571" elapsed="0.342302"/>
</kw>
<msg time="2026-04-13T02:58:23.608933" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:23.265992" elapsed="0.343003"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:23.265373" elapsed="0.343703"/>
</kw>
<msg time="2026-04-13T02:58:23.609117" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:23.264783" elapsed="0.344378"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:23.612006" 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-04-13T02:58:23.612576" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:23.612896" 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-04-13T02:58:23.609488" elapsed="0.003600"/>
</kw>
<msg time="2026-04-13T02:58:23.613193" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:23.263838" elapsed="0.349388"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.613797" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:23.613484" elapsed="0.000371"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:23.613905" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:23.614092" level="INFO">${mdl} = </msg>
<var>${mdl}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${MODELS_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:23.262806" elapsed="0.351312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.614573" level="INFO"/>
<arg>${mdl}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:23.614306" elapsed="0.000310"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${mdl}</arg>
<arg>.*${MODELS_FILE}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:23.614773" elapsed="0.000338"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:23.616132" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:23.615837" elapsed="0.000323"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:23.616971" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:23.620279" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.621117" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:23.620732" elapsed="0.000431"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:23.621719" level="INFO">${conn_id} = 182</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:23.621306" elapsed="0.000440"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.622861" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:23.622942" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:23.622372" elapsed="0.000595"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:23.623112" elapsed="0.000328"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:23.624576" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:23.945386" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:23 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:23.623999" elapsed="0.321550"/>
</kw>
<msg time="2026-04-13T02:58:23.945690" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:23.623616" elapsed="0.322165"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:23.621981" elapsed="0.323920"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:23.946435" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json'.</msg>
<msg time="2026-04-13T02:58:23.959149" level="INFO">Command exited with return code 2.</msg>
<msg time="2026-04-13T02:58:23.959428" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:23.959528" level="INFO">${stderr} = ls: cannot access '/tmp/karaf-0.24.0/daexim/odl_backup_operational.json': No such file or directory</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:23.946150" elapsed="0.013430"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:23.959963" elapsed="0.000468"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.961463" level="INFO">ls: cannot access '/tmp/karaf-0.24.0/daexim/odl_backup_operational.json': No such file or directory</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:23.960835" elapsed="0.000728"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:23.962136" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:23.961828" elapsed="0.000415"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:23.961775" 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-04-13T02:58:23.962664" elapsed="0.000045"/>
</return>
<status status="PASS" start="2026-04-13T02:58:23.962411" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:23.962378" elapsed="0.000419"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:23.962845" elapsed="0.000020"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:23.966644" elapsed="0.000463"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:23.967326" elapsed="0.000220"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:23.967849" 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-04-13T02:58:23.963271" elapsed="0.004792"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:23.619109" elapsed="0.349081"/>
</kw>
<msg time="2026-04-13T02:58:23.968263" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:23.618325" elapsed="0.350008"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:23.617799" elapsed="0.350643"/>
</kw>
<msg time="2026-04-13T02:58:23.968499" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:23.617248" elapsed="0.351319"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:23.971788" 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-04-13T02:58:23.972252" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:23.972530" elapsed="0.000115"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:23.968970" elapsed="0.003728"/>
</kw>
<msg time="2026-04-13T02:58:23.972788" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:23.616375" elapsed="0.356437"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.973217" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:23.972969" elapsed="0.000290"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:23.973301" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:23.973453" level="INFO">${opr} = </msg>
<var>${opr}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_OPER_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:23.615365" elapsed="0.358113"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.973904" level="INFO"/>
<arg>${opr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:23.973658" elapsed="0.000288"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${opr}</arg>
<arg>.*${EXP_OPER_FILE}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:23.974081" elapsed="0.000329"/>
</kw>
<arg>${SECOND_CONTROLLER_INDEX}</arg>
<doc>Verify if the backedup files are not present in the controller</doc>
<status status="PASS" start="2026-04-13T02:58:22.644813" elapsed="1.329659"/>
</kw>
<kw name="Verify Netconf Mount" owner="DaeximKeywords">
<kw name="Verify Status Information" owner="DaeximKeywords">
<for flavor="IN RANGE">
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:23.983251" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:23.982949" elapsed="0.000328"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:23.983323" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:23.983472" 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-04-13T02:58:23.982603" elapsed="0.000893"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.989903" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:23.989648" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:23.990331" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:23.990089" elapsed="0.000285"/>
</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-04-13T02:58:24.872516" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:24.873229" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Sun, 12-Apr-2026 02:58:24 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:24.873698" 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-04-13T02:58:23.992360" elapsed="0.881435"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:23.990441" elapsed="0.883472"/>
</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-04-13T02:58:24.874444" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:24.873983" elapsed="0.000614"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:23.990422" elapsed="0.884230"/>
</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-04-13T02:58:24.880480" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:24.876476" elapsed="0.004086"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:24.876008" elapsed="0.004613"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:24.875976" elapsed="0.004707"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.884663" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:24.881115" elapsed="0.003626"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:24.880778" elapsed="0.004016"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:24.880751" elapsed="0.004082"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.885754" 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-04-13T02:58:24.885090" elapsed="0.000705"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:24.886321" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:24.885908" elapsed="0.000505"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.887003" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:24.886670" elapsed="0.000360"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:24.886450" elapsed="0.000618"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:24.885878" elapsed="0.001212"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.887619" 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-04-13T02:58:24.887237" elapsed="0.000426"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:24.887976" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:24.887750" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.888559" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:24.888246" elapsed="0.000346"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:24.888080" elapsed="0.000569"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:24.887730" elapsed="0.000942"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:24.888825" elapsed="0.000360"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:24.889658" 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-04-13T02:58:24.889337" 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-04-13T02:58:24.889830" elapsed="0.002309"/>
</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-04-13T02:58:24.875258" elapsed="0.016954"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:24.892407" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-13T02:58:24.892291" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:24.892271" elapsed="0.000233"/>
</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-04-13T02:58:24.892656" elapsed="0.000025"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:24.892731" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:24.895347" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:23.983822" elapsed="0.911568"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:24.895468" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T02:58:24.895803" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:23.982056" elapsed="0.913787"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.896498" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:24.896067" elapsed="0.000472"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.897997" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:24.897398" elapsed="0.000640"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:24.898139" elapsed="0.000044"/>
</return>
<msg time="2026-04-13T02:58:24.898361" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:24.896881" elapsed="0.001521"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.899028" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:24.898623" elapsed="0.000481"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:24.904422" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:24.899310" elapsed="0.005155"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:24.933091" elapsed="0.000584"/>
</kw>
<msg time="2026-04-13T02:58:24.933766" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:24.932669" elapsed="0.001169"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:24.932099" elapsed="0.001822"/>
</kw>
<msg time="2026-04-13T02:58:24.933967" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:24.916194" elapsed="0.017818"/>
</kw>
<msg time="2026-04-13T02:58:24.934147" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:24.915662" elapsed="0.018512"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:24.934545" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:24.934326" elapsed="0.000244"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:24.934638" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:24.934843" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:24.934896" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:23.977751" elapsed="0.957169"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.935325" level="INFO">0</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:24.935073" elapsed="0.000296"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:24.935605" elapsed="0.000039"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:24.935448" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:24.935426" elapsed="0.000274"/>
</if>
<var name="${i}">0</var>
<status status="PASS" start="2026-04-13T02:58:23.977507" elapsed="0.958219"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:24.941955" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:24.941594" elapsed="0.000391"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:24.942040" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:58:24.942228" 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-04-13T02:58:24.941233" elapsed="0.001021"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.948759" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:24.948478" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.949220" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:24.948960" elapsed="0.000305"/>
</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-04-13T02:58:24.965785" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:24.966028" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:24.966210" 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-04-13T02:58:24.951468" elapsed="0.014782"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:24.949341" elapsed="0.016985"/>
</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-04-13T02:58:24.966582" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:24.966367" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:24.949320" elapsed="0.017415"/>
</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-04-13T02:58:24.971979" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:24.968365" elapsed="0.003687"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:24.968057" elapsed="0.004049"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:24.968028" elapsed="0.004115"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.975462" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:24.972536" elapsed="0.002985"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:24.972227" elapsed="0.003329"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:24.972201" elapsed="0.003380"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.976180" 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-04-13T02:58:24.975773" elapsed="0.000434"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:24.976499" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:24.976278" elapsed="0.000279"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.977049" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:24.976747" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:24.976581" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:24.976260" elapsed="0.000873"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.977670" 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-04-13T02:58:24.977273" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:24.978001" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:24.977779" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.978548" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:24.978238" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:24.978083" elapsed="0.000525"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:24.977760" elapsed="0.000884"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:24.978785" elapsed="0.000345"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:24.979572" 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-04-13T02:58:24.979278" elapsed="0.000320"/>
</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-04-13T02:58:24.979753" elapsed="0.002365"/>
</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-04-13T02:58:24.967401" elapsed="0.014865"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:24.982451" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T02:58:24.982340" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:24.982321" elapsed="0.000223"/>
</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-04-13T02:58:24.982699" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:24.982771" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T02:58:24.985012" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:24.942678" elapsed="0.042363"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:24.985093" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:24.985247" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:24.940637" elapsed="0.044636"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.985739" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:24.985417" elapsed="0.000350"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.986752" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:24.986329" elapsed="0.000451"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:24.986829" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:24.986986" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:24.985980" elapsed="0.001032"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:24.987410" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:24.987155" elapsed="0.000301"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:24.991171" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:24.987593" elapsed="0.003606"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:25.008362" elapsed="0.000552"/>
</kw>
<msg time="2026-04-13T02:58:25.008976" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.008001" elapsed="0.001037"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.007594" elapsed="0.001521"/>
</kw>
<msg time="2026-04-13T02:58:25.009159" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:24.999410" elapsed="0.009794"/>
</kw>
<msg time="2026-04-13T02:58:25.009309" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:24.999087" elapsed="0.010247"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.009712" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.009479" elapsed="0.000259"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:25.009788" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:25.009983" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:25.010108" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:24.936106" elapsed="0.074029"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.010570" level="INFO">1</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.010317" elapsed="0.000296"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:25.010876" elapsed="0.000020"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:25.010721" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.010697" elapsed="0.000251"/>
</if>
<var name="${i}">1</var>
<status status="PASS" start="2026-04-13T02:58:24.935887" elapsed="0.075087"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:25.017122" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.016790" elapsed="0.000359"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:25.017200" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:25.017355" 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-04-13T02:58:25.016373" elapsed="0.001007"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.023842" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.023560" elapsed="0.000329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.024283" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.024037" 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-04-13T02:58:25.039389" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:25.039601" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:25.039826" 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-04-13T02:58:25.026396" elapsed="0.013471"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.024403" elapsed="0.015536"/>
</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-04-13T02:58:25.040227" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.039982" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.024381" elapsed="0.015973"/>
</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-04-13T02:58:25.047017" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.041941" elapsed="0.005188"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.041588" elapsed="0.005619"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.041557" elapsed="0.005705"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.051601" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.047875" elapsed="0.003812"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.047389" elapsed="0.004335"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.047351" elapsed="0.004398"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.052343" 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-04-13T02:58:25.051923" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.052725" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.052440" elapsed="0.000347"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.053258" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.052955" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.052811" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.052421" elapsed="0.000919"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.053855" 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-04-13T02:58:25.053478" elapsed="0.000404"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.054254" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.054024" elapsed="0.000287"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.054812" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.054475" elapsed="0.000364"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.054335" elapsed="0.000540"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.054005" elapsed="0.000892"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.055044" elapsed="0.000351"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:25.055919" 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-04-13T02:58:25.055544" elapsed="0.000403"/>
</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-04-13T02:58:25.056089" elapsed="0.002430"/>
</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-04-13T02:58:25.040926" elapsed="0.017662"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:25.058796" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T02:58:25.058683" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.058662" elapsed="0.000229"/>
</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-04-13T02:58:25.059026" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:25.059095" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:25.061303" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:25.017734" elapsed="0.043597"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:25.061384" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:25.061540" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:25.015829" elapsed="0.045737"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.062045" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.061729" elapsed="0.000343"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.063105" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:25.062676" elapsed="0.000457"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:25.063182" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:25.063342" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:25.062307" elapsed="0.001061"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.063789" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.063513" elapsed="0.000323"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.067623" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.063972" elapsed="0.003697"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:25.084976" elapsed="0.000523"/>
</kw>
<msg time="2026-04-13T02:58:25.085569" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.084539" elapsed="0.001223"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.084108" elapsed="0.001746"/>
</kw>
<msg time="2026-04-13T02:58:25.085900" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.075931" elapsed="0.010016"/>
</kw>
<msg time="2026-04-13T02:58:25.086062" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.075565" elapsed="0.010522"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.086479" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.086258" elapsed="0.000246"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:25.086557" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:58:25.086785" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:25.086841" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:25.011335" elapsed="0.075531"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.087273" level="INFO">2</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.087020" elapsed="0.000297"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:25.087556" elapsed="0.000021"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:25.087396" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.087374" elapsed="0.000284"/>
</if>
<var name="${i}">2</var>
<status status="PASS" start="2026-04-13T02:58:25.011129" elapsed="0.076562"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:25.093854" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.093528" elapsed="0.000352"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:25.093946" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:25.094100" 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-04-13T02:58:25.093199" elapsed="0.000926"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.100541" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.100269" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.100992" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.100746" 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-04-13T02:58:25.116692" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:25.116883" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:25.117028" 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-04-13T02:58:25.103112" elapsed="0.013945"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.101113" elapsed="0.016003"/>
</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-04-13T02:58:25.117360" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.117152" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.101091" elapsed="0.016358"/>
</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-04-13T02:58:25.121284" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.118763" elapsed="0.002576"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.118499" elapsed="0.002875"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.118477" elapsed="0.002923"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.124107" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.121793" elapsed="0.002362"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.121479" elapsed="0.002720"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.121461" elapsed="0.002763"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.124832" 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-04-13T02:58:25.124400" elapsed="0.000459"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.125163" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.124931" elapsed="0.000289"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.125719" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.125401" elapsed="0.000344"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.125254" elapsed="0.000527"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.124913" elapsed="0.000889"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.126346" 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-04-13T02:58:25.125945" elapsed="0.000427"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.126671" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.126443" elapsed="0.000286"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.127184" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.126892" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.126752" elapsed="0.000493"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.126425" elapsed="0.000841"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.127405" elapsed="0.000359"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:25.128212" 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-04-13T02:58:25.127913" elapsed="0.000325"/>
</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-04-13T02:58:25.128376" elapsed="0.002549"/>
</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-04-13T02:58:25.117927" elapsed="0.013075"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:25.131204" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-13T02:58:25.131086" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.131062" 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-04-13T02:58:25.131459" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:25.131558" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:25.133820" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:25.094463" elapsed="0.039387"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:25.133902" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.134054" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:25.092653" elapsed="0.041427"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.134579" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.134256" elapsed="0.000351"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.135662" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:25.135230" elapsed="0.000462"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:25.135740" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.135897" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:25.134853" elapsed="0.001138"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.136401" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.136138" elapsed="0.000309"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.140289" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.136584" elapsed="0.003734"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:25.157522" elapsed="0.000512"/>
</kw>
<msg time="2026-04-13T02:58:25.158097" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.157163" elapsed="0.000996"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.156765" elapsed="0.001497"/>
</kw>
<msg time="2026-04-13T02:58:25.158308" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.148506" elapsed="0.009847"/>
</kw>
<msg time="2026-04-13T02:58:25.158457" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.148190" elapsed="0.010291"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.158872" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.158663" elapsed="0.000235"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:25.158947" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:25.159160" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:25.159212" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:25.088082" elapsed="0.071154"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.159696" level="INFO">3</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.159399" elapsed="0.000342"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:25.159985" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:25.159824" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.159798" elapsed="0.000257"/>
</if>
<var name="${i}">3</var>
<status status="PASS" start="2026-04-13T02:58:25.087860" elapsed="0.072220"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:25.166055" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.165755" elapsed="0.000326"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:25.166127" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:25.166309" 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-04-13T02:58:25.165407" elapsed="0.000928"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.172741" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.172447" elapsed="0.000340"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.173210" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.172947" elapsed="0.000306"/>
</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-04-13T02:58:25.188400" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:25.188596" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:25.188847" 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-04-13T02:58:25.175401" elapsed="0.013484"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.173323" elapsed="0.015622"/>
</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-04-13T02:58:25.189178" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.188983" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.173303" elapsed="0.015994"/>
</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-04-13T02:58:25.196004" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.190834" elapsed="0.005281"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.190448" elapsed="0.005743"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.190420" elapsed="0.005825"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.201798" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.196890" elapsed="0.005012"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.196371" elapsed="0.005606"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.196334" elapsed="0.005699"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.202968" 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-04-13T02:58:25.202408" elapsed="0.000587"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.203284" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.203066" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.203852" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.203521" elapsed="0.000357"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.203367" elapsed="0.000546"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.203048" elapsed="0.000885"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.204429" 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-04-13T02:58:25.204072" elapsed="0.000383"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.204750" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.204523" elapsed="0.000284"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.205265" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.204969" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.204831" elapsed="0.000495"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.204506" elapsed="0.000840"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.205483" elapsed="0.000361"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:25.206322" 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-04-13T02:58:25.205992" elapsed="0.000357"/>
</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-04-13T02:58:25.206504" elapsed="0.002531"/>
</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-04-13T02:58:25.189805" elapsed="0.019304"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:25.209294" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-13T02:58:25.209179" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.209161" elapsed="0.000232"/>
</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-04-13T02:58:25.209544" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:25.209675" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:58:25.211986" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:25.166667" elapsed="0.045348"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:25.212067" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.212275" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:25.164882" elapsed="0.047421"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.212799" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.212458" elapsed="0.000378"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.213833" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:25.213394" elapsed="0.000467"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:25.213910" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.214079" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:25.213046" elapsed="0.001059"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.214569" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.214290" elapsed="0.000325"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.218429" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.214776" elapsed="0.003682"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:25.235763" elapsed="0.000475"/>
</kw>
<msg time="2026-04-13T02:58:25.236290" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.235403" elapsed="0.000941"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.235033" elapsed="0.001384"/>
</kw>
<msg time="2026-04-13T02:58:25.236460" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.226839" elapsed="0.009664"/>
</kw>
<msg time="2026-04-13T02:58:25.236602" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.226519" elapsed="0.010126"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.236995" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.236793" elapsed="0.000227"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:25.237066" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.237253" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:25.237303" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:25.160429" elapsed="0.076898"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.237738" level="INFO">4</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.237476" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:25.237984" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:25.237847" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.237828" elapsed="0.000223"/>
</if>
<var name="${i}">4</var>
<status status="PASS" start="2026-04-13T02:58:25.160235" elapsed="0.077840"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:25.243978" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.243681" elapsed="0.000323"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:25.244048" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.244193" 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-04-13T02:58:25.243340" elapsed="0.000877"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.250601" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.250334" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.251041" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.250800" elapsed="0.000283"/>
</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-04-13T02:58:25.265320" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:25.265441" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:25.265535" 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-04-13T02:58:25.253071" elapsed="0.012490"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.251148" elapsed="0.014457"/>
</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-04-13T02:58:25.266003" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.265678" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.251130" elapsed="0.015059"/>
</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-04-13T02:58:25.273779" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.268567" elapsed="0.005319"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.268059" elapsed="0.005903"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.268001" elapsed="0.006015"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.276893" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.274697" elapsed="0.002242"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.274162" elapsed="0.002811"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.274125" elapsed="0.002871"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.277573" 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-04-13T02:58:25.277200" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.277903" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.277687" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.278435" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.278125" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.277984" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.277668" elapsed="0.000849"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.279195" 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-04-13T02:58:25.278677" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.279503" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.279290" elapsed="0.000269"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.280031" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.279739" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.279582" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.279272" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.280245" elapsed="0.000338"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:25.281024" 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-04-13T02:58:25.280747" elapsed="0.000302"/>
</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-04-13T02:58:25.281185" elapsed="0.002341"/>
</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-04-13T02:58:25.266996" elapsed="0.016624"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:25.283812" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-13T02:58:25.283706" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.283687" elapsed="0.000207"/>
</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-04-13T02:58:25.284025" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:25.284093" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:25.286247" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:25.244570" elapsed="0.041704"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:25.286352" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:25.286503" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:25.242821" elapsed="0.043708"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.286972" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.286685" elapsed="0.000314"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.287909" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:25.287505" elapsed="0.000432"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:25.287984" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.288140" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:25.287194" elapsed="0.000972"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.288557" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.288309" elapsed="0.000293"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.292234" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.288757" elapsed="0.003505"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:25.309349" elapsed="0.000530"/>
</kw>
<msg time="2026-04-13T02:58:25.309930" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.308995" elapsed="0.000985"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.308604" elapsed="0.001450"/>
</kw>
<msg time="2026-04-13T02:58:25.310096" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.300524" elapsed="0.009615"/>
</kw>
<msg time="2026-04-13T02:58:25.310240" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.300220" elapsed="0.010044"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.310622" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.310422" elapsed="0.000242"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:25.310710" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.310893" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:25.310978" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:25.238434" elapsed="0.072570"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.311414" level="INFO">5</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.311149" elapsed="0.000309"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:25.311687" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:25.311523" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.311506" elapsed="0.000254"/>
</if>
<var name="${i}">5</var>
<status status="PASS" start="2026-04-13T02:58:25.238217" elapsed="0.073566"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:25.318997" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.318696" elapsed="0.000328"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:25.319071" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:25.319232" 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-04-13T02:58:25.318348" elapsed="0.000909"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.325578" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.325325" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.326022" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.325779" 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-04-13T02:58:25.342900" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:25.343181" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:25.343433" 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-04-13T02:58:25.328242" elapsed="0.015252"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.326134" elapsed="0.017464"/>
</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-04-13T02:58:25.344037" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.343695" elapsed="0.000494"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.326115" elapsed="0.018124"/>
</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-04-13T02:58:25.351180" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.346668" elapsed="0.004562"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.346123" elapsed="0.005141"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.346077" elapsed="0.005212"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.353740" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.351555" elapsed="0.002231"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.351345" elapsed="0.002476"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.351328" elapsed="0.002518"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.354402" 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-04-13T02:58:25.353998" elapsed="0.000432"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.354740" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.354500" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.355269" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.354967" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.354823" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.354482" elapsed="0.000870"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.355871" 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-04-13T02:58:25.355493" elapsed="0.000404"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.356233" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.356017" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.356764" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.356454" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.356313" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.355999" elapsed="0.000848"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.356983" elapsed="0.000352"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:25.357800" 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-04-13T02:58:25.357487" 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-04-13T02:58:25.357968" elapsed="0.043036"/>
</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-04-13T02:58:25.345086" elapsed="0.056014"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:25.401323" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-13T02:58:25.401199" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.401170" elapsed="0.000254"/>
</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-04-13T02:58:25.401596" elapsed="0.000026"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:25.401694" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:25.403984" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:25.319568" elapsed="0.084446"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:25.404067" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:25.404223" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:25.317803" elapsed="0.086446"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.404958" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.404402" elapsed="0.000584"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.406018" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:25.405569" elapsed="0.000477"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:25.406095" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:25.406254" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:25.405210" elapsed="0.001070"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.406758" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.406461" elapsed="0.000347"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.410473" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.406946" elapsed="0.003555"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:25.427719" elapsed="0.000510"/>
</kw>
<msg time="2026-04-13T02:58:25.428288" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.427350" elapsed="0.001066"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.426847" elapsed="0.001651"/>
</kw>
<msg time="2026-04-13T02:58:25.428542" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.418739" elapsed="0.009849"/>
</kw>
<msg time="2026-04-13T02:58:25.428722" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.418395" elapsed="0.010352"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.429103" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.428893" elapsed="0.000235"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:25.429178" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:25.429375" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:25.429429" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:25.312125" elapsed="0.117329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.429869" level="INFO">6</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.429604" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:25.430139" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:25.429988" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.429967" elapsed="0.000242"/>
</if>
<var name="${i}">6</var>
<status status="PASS" start="2026-04-13T02:58:25.311933" elapsed="0.118301"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:25.436329" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.435885" elapsed="0.000470"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:25.436402" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.436549" 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-04-13T02:58:25.435541" elapsed="0.001032"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.442982" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.442715" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.443413" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.443170" elapsed="0.000286"/>
</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-04-13T02:58:25.460186" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:25.460329" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:25.460428" 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-04-13T02:58:25.445518" elapsed="0.014936"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.443532" elapsed="0.016965"/>
</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-04-13T02:58:25.460768" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.460523" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.443509" elapsed="0.017460"/>
</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-04-13T02:58:25.468762" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.463277" elapsed="0.005594"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.462789" elapsed="0.006482"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.462745" elapsed="0.006585"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.473524" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.470570" elapsed="0.003001"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.469456" elapsed="0.004150"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.469420" elapsed="0.004226"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.474229" 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-04-13T02:58:25.473811" elapsed="0.000447"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.474590" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.474347" elapsed="0.000322"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.475140" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.474840" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.474693" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.474328" elapsed="0.000894"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.475741" 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-04-13T02:58:25.475362" elapsed="0.000405"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.476050" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.475837" elapsed="0.000269"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.476559" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.476268" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.476129" elapsed="0.000491"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.475819" elapsed="0.000838"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.476797" elapsed="0.000372"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:25.477613" 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-04-13T02:58:25.477318" 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-04-13T02:58:25.477796" elapsed="0.002180"/>
</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-04-13T02:58:25.461760" elapsed="0.018278"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:25.480216" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-13T02:58:25.480109" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.480091" elapsed="0.000214"/>
</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-04-13T02:58:25.480438" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:25.480508" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:25.482724" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:25.436905" elapsed="0.045847"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:25.482803" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:25.482953" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:25.435012" elapsed="0.047967"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.483409" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.483123" elapsed="0.000315"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.484371" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:25.483976" elapsed="0.000423"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:25.484446" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.484602" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:25.483653" elapsed="0.001040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.485097" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.484844" elapsed="0.000300"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.488866" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.485282" elapsed="0.003614"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:25.506003" elapsed="0.000510"/>
</kw>
<msg time="2026-04-13T02:58:25.506567" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.505652" elapsed="0.000971"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.505265" elapsed="0.001456"/>
</kw>
<msg time="2026-04-13T02:58:25.506765" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.497119" elapsed="0.009690"/>
</kw>
<msg time="2026-04-13T02:58:25.506911" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.496808" elapsed="0.010127"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.507276" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.507076" elapsed="0.000225"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:25.507347" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.507535" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:25.507585" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:25.430610" elapsed="0.076999"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.508019" level="INFO">7</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.507776" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:25.508273" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:25.508128" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.508110" elapsed="0.000234"/>
</if>
<var name="${i}">7</var>
<status status="PASS" start="2026-04-13T02:58:25.430412" elapsed="0.077956"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:25.514262" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.513966" elapsed="0.000322"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:25.514334" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.514509" 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-04-13T02:58:25.513623" elapsed="0.000912"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.520799" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.520535" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.521225" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.520982" elapsed="0.000285"/>
</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-04-13T02:58:25.536601" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:25.537019" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:25.537454" 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-04-13T02:58:25.523302" elapsed="0.014239"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.521334" elapsed="0.016387"/>
</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-04-13T02:58:25.538291" elapsed="0.000077"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.537812" elapsed="0.000768"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.521316" elapsed="0.017377"/>
</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-04-13T02:58:25.545975" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.541173" elapsed="0.004909"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.540727" elapsed="0.005428"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.540680" elapsed="0.005527"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.549968" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.546840" elapsed="0.003177"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.546329" elapsed="0.003724"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.546293" elapsed="0.003786"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.550722" 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-04-13T02:58:25.550245" elapsed="0.000504"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.551116" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.550822" elapsed="0.000368"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.551723" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.551367" elapsed="0.000384"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.551215" elapsed="0.000573"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.550804" elapsed="0.001005"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.552355" 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-04-13T02:58:25.551956" elapsed="0.000433"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.552723" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.552465" elapsed="0.000319"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.553296" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.552953" elapsed="0.000371"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.552808" elapsed="0.000553"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.552446" elapsed="0.000937"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.553527" elapsed="0.000429"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:25.554536" 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-04-13T02:58:25.554153" elapsed="0.000414"/>
</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-04-13T02:58:25.554748" elapsed="0.002530"/>
</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-04-13T02:58:25.539807" elapsed="0.017541"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:25.557547" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T02:58:25.557421" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.557402" 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-04-13T02:58:25.557801" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:25.557872" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:25.560124" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:25.514859" elapsed="0.045293"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:25.560206" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.560410" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:25.513098" elapsed="0.047339"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.560944" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.560603" elapsed="0.000369"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.562087" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:25.561539" elapsed="0.000589"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:25.562197" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T02:58:25.562403" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:25.561184" elapsed="0.001250"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.562993" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.562666" elapsed="0.000391"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.566954" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.563256" elapsed="0.003728"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:25.586023" elapsed="0.000560"/>
</kw>
<msg time="2026-04-13T02:58:25.586664" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.585661" elapsed="0.001071"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.585260" elapsed="0.001553"/>
</kw>
<msg time="2026-04-13T02:58:25.586859" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.576108" elapsed="0.010796"/>
</kw>
<msg time="2026-04-13T02:58:25.587007" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.575736" elapsed="0.011296"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.587388" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.587179" elapsed="0.000236"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:25.587467" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:25.587690" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:25.587744" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:25.508722" elapsed="0.079047"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.588179" level="INFO">8</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.587920" elapsed="0.000304"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:25.588453" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:25.588302" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.588280" elapsed="0.000240"/>
</if>
<var name="${i}">8</var>
<status status="PASS" start="2026-04-13T02:58:25.508515" elapsed="0.080029"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:25.594813" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.594388" elapsed="0.000453"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:25.594888" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:25.595038" 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-04-13T02:58:25.594043" elapsed="0.001019"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.601407" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.601155" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.601853" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.601591" elapsed="0.000305"/>
</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-04-13T02:58:25.617872" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:25.618015" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:25.618110" 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-04-13T02:58:25.603905" elapsed="0.014231"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.601964" elapsed="0.016219"/>
</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-04-13T02:58:25.618352" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.618212" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.601944" elapsed="0.016492"/>
</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-04-13T02:58:25.621901" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.619496" elapsed="0.002460"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.619284" elapsed="0.002716"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.619264" elapsed="0.002763"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.626197" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.622324" elapsed="0.003988"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.622086" elapsed="0.004329"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.622068" elapsed="0.004464"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.627814" 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-04-13T02:58:25.626967" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.628180" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.627933" elapsed="0.000309"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.628763" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.628423" elapsed="0.000368"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.628266" elapsed="0.000569"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.627913" elapsed="0.000946"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.629417" 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-04-13T02:58:25.629010" elapsed="0.000440"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.629793" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.629532" elapsed="0.000322"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.630374" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.630045" elapsed="0.000357"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.629885" elapsed="0.000560"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.629512" elapsed="0.000957"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.630661" elapsed="0.000364"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:25.631519" 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-04-13T02:58:25.631193" 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-04-13T02:58:25.631725" elapsed="0.002501"/>
</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-04-13T02:58:25.618858" elapsed="0.015484"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:25.634564" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-13T02:58:25.634422" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.634398" elapsed="0.000289"/>
</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-04-13T02:58:25.634831" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:25.634912" elapsed="0.000017"/>
</return>
<msg time="2026-04-13T02:58:25.637247" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:25.595446" elapsed="0.041831"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:25.637335" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:25.637521" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:25.593434" elapsed="0.044116"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.638058" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.637729" elapsed="0.000363"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.639109" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:25.638693" elapsed="0.000445"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:25.639195" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:25.639367" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:25.638307" elapsed="0.001090"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.639848" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.639540" elapsed="0.000366"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.643822" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.640050" elapsed="0.003800"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:25.662326" elapsed="0.000516"/>
</kw>
<msg time="2026-04-13T02:58:25.662895" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.661980" elapsed="0.000968"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.661593" elapsed="0.001431"/>
</kw>
<msg time="2026-04-13T02:58:25.663067" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.652317" elapsed="0.010794"/>
</kw>
<msg time="2026-04-13T02:58:25.663213" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.652003" elapsed="0.011234"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.663580" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.663378" elapsed="0.000227"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:25.663673" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:25.663864" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:25.663957" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:25.588944" elapsed="0.075040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.664376" level="INFO">9</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.664131" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:25.664646" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:25.664488" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.664470" elapsed="0.000244"/>
</if>
<var name="${i}">9</var>
<status status="PASS" start="2026-04-13T02:58:25.588733" elapsed="0.076005"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:25.670653" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.670310" elapsed="0.000371"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:25.670728" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.670875" 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-04-13T02:58:25.669983" elapsed="0.000916"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.677161" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.676912" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.677588" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.677346" elapsed="0.000300"/>
</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-04-13T02:58:25.695961" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:25.696087" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:25.696186" 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-04-13T02:58:25.679773" elapsed="0.016439"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.677717" elapsed="0.018539"/>
</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-04-13T02:58:25.696424" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.696281" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.677697" elapsed="0.018813"/>
</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-04-13T02:58:25.704186" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.698854" elapsed="0.005444"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.698309" elapsed="0.006064"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.698265" elapsed="0.006163"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.708887" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.705088" elapsed="0.003846"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.704558" elapsed="0.004412"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.704517" elapsed="0.004477"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.709536" 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-04-13T02:58:25.709146" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.709887" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.709648" elapsed="0.000300"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.710420" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.710116" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.709972" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.709614" elapsed="0.000887"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.711050" 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-04-13T02:58:25.710682" elapsed="0.000395"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.711425" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.711204" elapsed="0.000279"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.711967" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.711666" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.711508" elapsed="0.000521"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.711184" elapsed="0.000866"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.712187" elapsed="0.000347"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:25.713013" 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-04-13T02:58:25.712718" elapsed="0.000322"/>
</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-04-13T02:58:25.713179" elapsed="0.002483"/>
</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-04-13T02:58:25.697241" elapsed="0.018488"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:25.715911" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-13T02:58:25.715802" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.715782" elapsed="0.000217"/>
</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-04-13T02:58:25.716133" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:25.716203" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:25.718600" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:25.671210" elapsed="0.047433"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:25.718697" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:25.718906" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:25.669442" elapsed="0.049502"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.719414" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.719117" elapsed="0.000324"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.720396" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:25.719981" elapsed="0.000453"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:25.720500" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T02:58:25.720711" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:25.719659" elapsed="0.001079"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.721136" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.720882" elapsed="0.000301"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.725158" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.721319" elapsed="0.003867"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:25.743510" elapsed="0.000524"/>
</kw>
<msg time="2026-04-13T02:58:25.744088" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.743151" elapsed="0.001040"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.742759" elapsed="0.001511"/>
</kw>
<msg time="2026-04-13T02:58:25.744313" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.734113" elapsed="0.010244"/>
</kw>
<msg time="2026-04-13T02:58:25.744473" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.733765" elapsed="0.010738"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.744900" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.744676" elapsed="0.000251"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:25.744976" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:25.745172" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:25.745224" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:25.665071" elapsed="0.080177"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.745680" level="INFO">10</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.745395" elapsed="0.000344"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:25.745974" elapsed="0.000022"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:25.745822" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.745802" elapsed="0.000245"/>
</if>
<var name="${i}">10</var>
<status status="PASS" start="2026-04-13T02:58:25.664882" elapsed="0.081189"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:25.752933" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.752509" elapsed="0.000458"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:25.753025" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:58:25.753207" 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-04-13T02:58:25.752079" elapsed="0.001160"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.762118" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.761784" elapsed="0.000398"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.762728" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.762361" elapsed="0.000426"/>
</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-04-13T02:58:25.779451" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:25.779732" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:25.779882" 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-04-13T02:58:25.765691" elapsed="0.014229"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.762881" elapsed="0.017118"/>
</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-04-13T02:58:25.780327" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.780050" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.762853" elapsed="0.017608"/>
</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-04-13T02:58:25.785510" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.782122" elapsed="0.003464"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.781791" elapsed="0.003867"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.781759" elapsed="0.003941"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.789397" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.786190" elapsed="0.003278"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.785787" elapsed="0.003732"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.785761" elapsed="0.003797"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.790427" 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-04-13T02:58:25.789828" elapsed="0.000640"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.790968" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.790609" elapsed="0.000446"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.791778" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.791319" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.791093" elapsed="0.000777"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.790546" elapsed="0.001357"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.792699" 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-04-13T02:58:25.792124" elapsed="0.000615"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.793172" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.792842" elapsed="0.000418"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.793980" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.793521" elapsed="0.000492"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.793299" elapsed="0.000765"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.792814" elapsed="0.001284"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.794312" elapsed="0.000586"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:25.795572" 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-04-13T02:58:25.795126" elapsed="0.000486"/>
</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-04-13T02:58:25.795856" elapsed="0.003487"/>
</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-04-13T02:58:25.781073" elapsed="0.018355"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:25.799702" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-04-13T02:58:25.799516" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.799493" elapsed="0.000355"/>
</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-04-13T02:58:25.800052" elapsed="0.000035"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:25.800162" elapsed="0.000024"/>
</return>
<msg time="2026-04-13T02:58:25.803325" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:25.753670" elapsed="0.049691"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:25.803429" elapsed="0.000038"/>
</return>
<msg time="2026-04-13T02:58:25.803646" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:25.751358" elapsed="0.052323"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.804248" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.803867" elapsed="0.000417"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.805561" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:25.805006" elapsed="0.000598"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:25.805696" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T02:58:25.805935" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:25.804557" elapsed="0.001466"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.806662" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.806241" elapsed="0.000489"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.810382" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.806879" elapsed="0.003531"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:25.827552" elapsed="0.000516"/>
</kw>
<msg time="2026-04-13T02:58:25.828124" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.827205" elapsed="0.000978"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.826829" elapsed="0.001430"/>
</kw>
<msg time="2026-04-13T02:58:25.828303" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.818625" elapsed="0.009722"/>
</kw>
<msg time="2026-04-13T02:58:25.828450" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.818278" elapsed="0.010196"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.828846" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.828617" elapsed="0.000254"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:25.828920" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:25.829114" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:25.829165" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:25.746408" elapsed="0.082781"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.829583" level="INFO">11</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.829337" elapsed="0.000304"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:25.829861" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:25.829715" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.829696" elapsed="0.000233"/>
</if>
<var name="${i}">11</var>
<status status="PASS" start="2026-04-13T02:58:25.746217" elapsed="0.083736"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:25.835915" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.835595" elapsed="0.000347"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:25.835989" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:25.836137" 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-04-13T02:58:25.835267" elapsed="0.000895"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.842390" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.842141" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.842854" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.842571" elapsed="0.000327"/>
</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-04-13T02:58:25.860047" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:25.860184" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:25.860338" 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-04-13T02:58:25.844900" elapsed="0.015465"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.842968" elapsed="0.017440"/>
</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-04-13T02:58:25.860576" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.860434" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.842949" elapsed="0.017733"/>
</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-04-13T02:58:25.863970" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.861705" elapsed="0.002314"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.861471" elapsed="0.002582"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.861450" elapsed="0.002627"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.866488" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.864339" elapsed="0.002194"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.864133" elapsed="0.002434"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.864117" elapsed="0.002474"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.867163" 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-04-13T02:58:25.866775" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.867480" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.867261" elapsed="0.000277"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.868033" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.867730" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.867564" elapsed="0.000531"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.867243" elapsed="0.000873"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.868623" 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-04-13T02:58:25.868260" elapsed="0.000406"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.868951" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.868736" elapsed="0.000271"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.869462" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.869170" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.869030" elapsed="0.000493"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.868719" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.869698" elapsed="0.000344"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:25.870489" 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-04-13T02:58:25.870192" elapsed="0.000322"/>
</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-04-13T02:58:25.870692" elapsed="0.003420"/>
</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-04-13T02:58:25.861045" elapsed="0.013133"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:25.874357" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-13T02:58:25.874249" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.874230" elapsed="0.000214"/>
</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-04-13T02:58:25.874577" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:25.874678" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T02:58:25.876865" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:25.836476" elapsed="0.040418"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:25.876947" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:25.877135" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:25.834739" elapsed="0.042423"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.877599" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.877306" elapsed="0.000334"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.878565" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:25.878169" elapsed="0.000425"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:25.878689" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:25.878856" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:25.877847" elapsed="0.001035"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.879279" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.879025" elapsed="0.000301"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.882961" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.879460" elapsed="0.003530"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:25.899995" elapsed="0.000500"/>
</kw>
<msg time="2026-04-13T02:58:25.900550" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.899638" elapsed="0.000970"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.899250" elapsed="0.001461"/>
</kw>
<msg time="2026-04-13T02:58:25.900756" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.891186" elapsed="0.009624"/>
</kw>
<msg time="2026-04-13T02:58:25.900914" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.890876" elapsed="0.010062"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.901285" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.901081" elapsed="0.000230"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:25.901360" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:25.901552" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:25.901605" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:25.830302" elapsed="0.071341"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.902039" level="INFO">12</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.901793" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:25.902300" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:25.902154" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.902135" elapsed="0.000231"/>
</if>
<var name="${i}">12</var>
<status status="PASS" start="2026-04-13T02:58:25.830108" elapsed="0.072282"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:25.908390" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.908084" elapsed="0.000332"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:25.908463" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:25.908614" 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-04-13T02:58:25.907753" elapsed="0.000901"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.915013" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.914756" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.915443" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.915199" 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-04-13T02:58:25.930777" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:25.930923" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:25.931029" 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-04-13T02:58:25.917489" elapsed="0.013567"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.915556" elapsed="0.015545"/>
</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-04-13T02:58:25.931283" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.931129" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.915537" elapsed="0.015832"/>
</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-04-13T02:58:25.934746" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.932410" elapsed="0.002385"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.932195" elapsed="0.002634"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.932176" elapsed="0.002678"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.937287" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.935115" elapsed="0.002218"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.934909" elapsed="0.002457"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.934893" elapsed="0.002497"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.937963" 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-04-13T02:58:25.937548" elapsed="0.000442"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.938277" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.938060" elapsed="0.000273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.938856" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.938507" elapsed="0.000374"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.938357" elapsed="0.000560"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.938042" elapsed="0.000896"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.939440" 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-04-13T02:58:25.939078" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:25.939767" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:25.939534" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.940282" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.939990" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.939849" elapsed="0.000493"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.939516" elapsed="0.000848"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.940501" elapsed="0.000361"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:25.941308" 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-04-13T02:58:25.941012" elapsed="0.000322"/>
</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-04-13T02:58:25.941472" elapsed="0.002374"/>
</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-04-13T02:58:25.931754" elapsed="0.012209"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:25.944144" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-13T02:58:25.944034" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.944015" 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-04-13T02:58:25.944370" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:25.944439" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:25.946642" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:25.909041" elapsed="0.037663"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:25.946757" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:25.946917" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:25.907195" elapsed="0.039748"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.947377" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.947087" elapsed="0.000317"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.948343" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:25.947946" elapsed="0.000426"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:25.948419" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:25.948575" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:25.947606" elapsed="0.000994"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.949014" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.948761" elapsed="0.000299"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.952712" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.949197" elapsed="0.003543"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:25.969776" elapsed="0.000499"/>
</kw>
<msg time="2026-04-13T02:58:25.970334" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.969408" elapsed="0.000985"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.969029" elapsed="0.001440"/>
</kw>
<msg time="2026-04-13T02:58:25.970514" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:25.960953" elapsed="0.009607"/>
</kw>
<msg time="2026-04-13T02:58:25.970720" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:25.960623" elapsed="0.010124"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:25.971110" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:25.970904" elapsed="0.000231"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:25.971185" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:25.971446" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:25.971500" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:25.902761" elapsed="0.068764"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.971943" level="INFO">13</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.971692" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:25.972214" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:25.972064" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.972042" elapsed="0.000241"/>
</if>
<var name="${i}">13</var>
<status status="PASS" start="2026-04-13T02:58:25.902539" elapsed="0.069769"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:25.978319" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:25.978018" elapsed="0.000328"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:25.978392" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:25.978540" 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-04-13T02:58:25.977679" elapsed="0.000885"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.984913" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.984650" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:25.985346" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:25.985101" 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-04-13T02:58:26.001844" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:26.001990" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:26.002094" 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-04-13T02:58:25.987434" elapsed="0.014686"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:25.985461" elapsed="0.016704"/>
</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-04-13T02:58:26.002341" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.002193" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:25.985441" elapsed="0.016985"/>
</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-04-13T02:58:26.005778" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.003482" elapsed="0.002344"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.003271" elapsed="0.002589"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.003252" elapsed="0.002633"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.008322" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.006146" elapsed="0.002222"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.005940" elapsed="0.002462"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.005924" elapsed="0.002503"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.008992" 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-04-13T02:58:26.008584" elapsed="0.000435"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.009306" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.009089" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.009847" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.009531" elapsed="0.000341"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.009388" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.009071" elapsed="0.000858"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.010430" 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-04-13T02:58:26.010070" elapsed="0.000386"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.010867" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.010590" elapsed="0.000336"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.011396" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.011096" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.010951" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.010572" elapsed="0.000907"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.011617" elapsed="0.000366"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:26.012425" 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-04-13T02:58:26.012134" elapsed="0.000317"/>
</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-04-13T02:58:26.012590" elapsed="0.002369"/>
</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-04-13T02:58:26.002833" elapsed="0.012190"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:26.015203" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-13T02:58:26.015094" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.015076" elapsed="0.000220"/>
</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-04-13T02:58:26.015439" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:26.015511" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:26.017753" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:25.978934" elapsed="0.038847"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:26.017834" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.017985" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:25.977133" elapsed="0.040877"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.018442" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.018153" elapsed="0.000316"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.019428" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:26.019033" elapsed="0.000423"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:26.019503" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.019675" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:26.018683" elapsed="0.001019"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.020096" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.019846" elapsed="0.000297"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.023794" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.020278" elapsed="0.003543"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:26.041158" elapsed="0.000679"/>
</kw>
<msg time="2026-04-13T02:58:26.041976" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.040738" elapsed="0.001304"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.040286" elapsed="0.001834"/>
</kw>
<msg time="2026-04-13T02:58:26.042166" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.031995" elapsed="0.010215"/>
</kw>
<msg time="2026-04-13T02:58:26.042319" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.031690" elapsed="0.010653"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.042763" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.042490" elapsed="0.000310"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:26.042849" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:26.043048" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:26.043102" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:25.972698" elapsed="0.070429"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.043526" level="INFO">14</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.043277" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:26.043822" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:26.043669" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.043645" elapsed="0.000245"/>
</if>
<var name="${i}">14</var>
<status status="PASS" start="2026-04-13T02:58:25.972467" elapsed="0.071449"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:26.050070" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.049766" elapsed="0.000330"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:26.050144" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:26.050291" 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-04-13T02:58:26.049417" elapsed="0.000898"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.056703" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.056428" elapsed="0.000323"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.057132" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.056890" elapsed="0.000285"/>
</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-04-13T02:58:26.072023" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:26.072179" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:26.072283" 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-04-13T02:58:26.059368" elapsed="0.012941"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.057248" elapsed="0.015105"/>
</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-04-13T02:58:26.072527" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.072383" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.057227" elapsed="0.015384"/>
</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-04-13T02:58:26.075977" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.073676" elapsed="0.002350"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.073451" elapsed="0.002608"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.073431" elapsed="0.002722"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.078589" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.076423" elapsed="0.002226"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.076213" elapsed="0.002471"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.076196" elapsed="0.002513"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.079311" 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-04-13T02:58:26.078903" elapsed="0.000435"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.079648" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.079409" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.080182" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.079881" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.079732" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.079391" elapsed="0.000873"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.080784" 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-04-13T02:58:26.080407" elapsed="0.000404"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.081097" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.080881" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.081609" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.081319" elapsed="0.000332"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.081177" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.080864" elapsed="0.000844"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.081850" elapsed="0.000342"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:26.082662" 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-04-13T02:58:26.082342" 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-04-13T02:58:26.082849" elapsed="0.002350"/>
</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-04-13T02:58:26.073012" elapsed="0.012251"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:26.085445" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T02:58:26.085335" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.085316" elapsed="0.000222"/>
</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-04-13T02:58:26.085692" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:26.085765" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:26.087979" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:26.050651" elapsed="0.037355"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:26.088058" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.088209" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:26.048888" elapsed="0.039346"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.088684" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.088379" elapsed="0.000332"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.089653" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:26.089242" elapsed="0.000440"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:26.089730" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.089947" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:26.088920" elapsed="0.001053"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.090372" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.090118" elapsed="0.000299"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.094070" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.090553" elapsed="0.003545"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:26.111235" elapsed="0.000508"/>
</kw>
<msg time="2026-04-13T02:58:26.111796" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.110887" elapsed="0.000965"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.110465" elapsed="0.001460"/>
</kw>
<msg time="2026-04-13T02:58:26.111968" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.102319" elapsed="0.009693"/>
</kw>
<msg time="2026-04-13T02:58:26.112112" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.102012" elapsed="0.010124"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.112478" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.112278" elapsed="0.000225"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:26.112548" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.112755" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:26.112807" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:26.044280" elapsed="0.068551"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.113221" level="INFO">15</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.112981" elapsed="0.000283"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:26.113471" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:26.113329" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.113312" elapsed="0.000224"/>
</if>
<var name="${i}">15</var>
<status status="PASS" start="2026-04-13T02:58:26.044071" elapsed="0.069489"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:26.119437" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.119140" elapsed="0.000323"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:26.119508" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.119671" 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-04-13T02:58:26.118812" elapsed="0.000885"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.125936" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.125688" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.126359" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.126119" elapsed="0.000283"/>
</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-04-13T02:58:26.142725" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:26.142871" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:26.143006" 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-04-13T02:58:26.128399" elapsed="0.014634"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.126468" elapsed="0.016607"/>
</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-04-13T02:58:26.143240" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.143100" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.126450" elapsed="0.016874"/>
</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-04-13T02:58:26.146555" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.144306" elapsed="0.002297"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.144102" elapsed="0.002549"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.144082" elapsed="0.002595"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.149118" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.146959" elapsed="0.002204"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.146734" elapsed="0.002462"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.146717" elapsed="0.002504"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.149759" 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-04-13T02:58:26.149367" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.150071" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.149855" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.150590" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.150296" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.150152" elapsed="0.000514"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.149837" elapsed="0.000851"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.151217" 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-04-13T02:58:26.150857" elapsed="0.000387"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.151526" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.151313" elapsed="0.000268"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.152056" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.151765" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.151604" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.151295" elapsed="0.000842"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.152270" elapsed="0.000339"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:26.153056" 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-04-13T02:58:26.152774" elapsed="0.000308"/>
</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-04-13T02:58:26.153217" elapsed="0.002327"/>
</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-04-13T02:58:26.143681" elapsed="0.011925"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:26.155797" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-13T02:58:26.155691" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.155672" 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-04-13T02:58:26.156015" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:26.156085" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:26.158271" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:26.120013" elapsed="0.038286"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:26.158350" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:26.158534" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:26.118262" elapsed="0.040299"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.159035" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.158717" elapsed="0.000345"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.159986" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:26.159577" elapsed="0.000437"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:26.160062" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.160218" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:26.159260" elapsed="0.000984"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.160649" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.160384" elapsed="0.000313"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.164321" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.160833" elapsed="0.003515"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:26.181304" elapsed="0.000486"/>
</kw>
<msg time="2026-04-13T02:58:26.181842" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.180964" elapsed="0.000929"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.180581" elapsed="0.001385"/>
</kw>
<msg time="2026-04-13T02:58:26.182010" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.172522" elapsed="0.009531"/>
</kw>
<msg time="2026-04-13T02:58:26.182154" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.172219" elapsed="0.009959"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.182519" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.182320" elapsed="0.000224"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:26.182590" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.182822" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:26.182874" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:26.113913" elapsed="0.068985"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.183287" level="INFO">16</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.183046" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:26.183533" elapsed="0.000015"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:26.183394" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.183377" elapsed="0.000218"/>
</if>
<var name="${i}">16</var>
<status status="PASS" start="2026-04-13T02:58:26.113725" elapsed="0.069892"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:26.189497" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.189179" elapsed="0.000347"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:26.189578" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:58:26.189760" 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-04-13T02:58:26.188851" elapsed="0.000933"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.196179" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.195924" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.196605" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.196362" elapsed="0.000301"/>
</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-04-13T02:58:26.212308" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:26.212459" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:26.212567" 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-04-13T02:58:26.198692" elapsed="0.013901"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.196744" elapsed="0.015934"/>
</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-04-13T02:58:26.213085" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.212759" elapsed="0.000467"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.196722" elapsed="0.016552"/>
</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-04-13T02:58:26.220720" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.215542" elapsed="0.005290"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.215084" elapsed="0.005826"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.215041" elapsed="0.005925"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.224967" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.221551" elapsed="0.003463"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.221092" elapsed="0.003957"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.221055" elapsed="0.004019"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.225667" 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-04-13T02:58:26.225245" elapsed="0.000450"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.225988" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.225767" elapsed="0.000279"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.226516" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.226215" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.226069" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.225748" elapsed="0.000851"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.227154" 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-04-13T02:58:26.226758" elapsed="0.000423"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.227465" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.227251" elapsed="0.000271"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.228000" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.227708" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.227546" elapsed="0.000515"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.227233" elapsed="0.000849"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.228222" elapsed="0.000343"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:26.229026" 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-04-13T02:58:26.228729" elapsed="0.000323"/>
</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-04-13T02:58:26.229193" elapsed="0.002394"/>
</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-04-13T02:58:26.214079" elapsed="0.017657"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:26.231922" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T02:58:26.231810" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.231790" elapsed="0.000224"/>
</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-04-13T02:58:26.232149" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:26.232219" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:26.234398" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:26.190171" elapsed="0.044256"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:26.234479" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.234645" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:26.188321" elapsed="0.046351"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.235122" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.234828" elapsed="0.000322"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.236108" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:26.235710" elapsed="0.000426"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:26.236184" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.236339" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:26.235359" elapsed="0.001006"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.236776" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.236507" elapsed="0.000315"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.240475" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.236960" elapsed="0.003542"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:26.257549" elapsed="0.000515"/>
</kw>
<msg time="2026-04-13T02:58:26.258119" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.257202" elapsed="0.000975"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.256831" elapsed="0.001422"/>
</kw>
<msg time="2026-04-13T02:58:26.258296" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.248724" elapsed="0.009617"/>
</kw>
<msg time="2026-04-13T02:58:26.258442" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.248388" elapsed="0.010079"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.258895" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.258611" elapsed="0.000311"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:26.258971" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:26.259222" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:26.259274" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:26.183957" elapsed="0.075342"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.259714" level="INFO">17</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.259448" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:26.259980" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:26.259833" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.259813" elapsed="0.000234"/>
</if>
<var name="${i}">17</var>
<status status="PASS" start="2026-04-13T02:58:26.183771" elapsed="0.076300"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:26.266147" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.265831" elapsed="0.000344"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:26.266224" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:26.266375" 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-04-13T02:58:26.265484" elapsed="0.000915"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.272729" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.272455" elapsed="0.000320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.273155" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.272913" elapsed="0.000285"/>
</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-04-13T02:58:26.288351" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:26.288496" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:26.288602" 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-04-13T02:58:26.275228" elapsed="0.013433"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.273269" elapsed="0.015496"/>
</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-04-13T02:58:26.289189" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.288839" elapsed="0.000503"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.273249" elapsed="0.016143"/>
</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-04-13T02:58:26.297366" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.291911" elapsed="0.005561"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.291371" elapsed="0.006175"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.291325" elapsed="0.006275"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.301243" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.298215" elapsed="0.003074"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.297757" elapsed="0.003567"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.297719" elapsed="0.003629"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.301936" 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-04-13T02:58:26.301515" elapsed="0.000448"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.302251" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.302033" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.302796" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.302478" elapsed="0.000345"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.302333" elapsed="0.000543"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.302014" elapsed="0.000885"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.303403" 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-04-13T02:58:26.303041" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.303799" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.303566" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.304313" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.304022" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.303880" elapsed="0.000494"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.303548" elapsed="0.000848"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.304534" elapsed="0.000385"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:26.305369" 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-04-13T02:58:26.305072" elapsed="0.000324"/>
</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-04-13T02:58:26.305535" elapsed="0.003741"/>
</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-04-13T02:58:26.290260" elapsed="0.019085"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:26.309529" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-13T02:58:26.309418" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.309399" elapsed="0.000223"/>
</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-04-13T02:58:26.309774" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:26.309846" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:26.312056" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:26.266737" elapsed="0.045347"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:26.312136" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.312287" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:26.264945" elapsed="0.047367"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.312771" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.312454" elapsed="0.000345"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.313766" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:26.313348" elapsed="0.000446"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:26.313841" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.313996" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:26.313013" elapsed="0.001008"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.314414" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.314163" elapsed="0.000296"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.318135" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.314593" elapsed="0.003569"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:26.335537" elapsed="0.000528"/>
</kw>
<msg time="2026-04-13T02:58:26.336191" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.335173" elapsed="0.001081"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.334563" elapsed="0.001770"/>
</kw>
<msg time="2026-04-13T02:58:26.336379" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.326421" elapsed="0.010006"/>
</kw>
<msg time="2026-04-13T02:58:26.336537" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.326106" elapsed="0.010456"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.337017" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.336774" elapsed="0.000270"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:26.337096" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:26.337297" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:26.337352" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:26.260415" elapsed="0.076961"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.337817" level="INFO">18</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.337526" elapsed="0.000357"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:26.338120" elapsed="0.000020"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:26.337966" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.337944" elapsed="0.000245"/>
</if>
<var name="${i}">18</var>
<status status="PASS" start="2026-04-13T02:58:26.260221" elapsed="0.077992"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:26.344273" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.343967" elapsed="0.000333"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:26.344347" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:26.344497" 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-04-13T02:58:26.343620" elapsed="0.000902"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.350846" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.350573" elapsed="0.000335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.351290" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.351047" elapsed="0.000286"/>
</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-04-13T02:58:26.364527" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:26.364742" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:26.365008" 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-04-13T02:58:26.353374" elapsed="0.011696"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.351403" elapsed="0.013771"/>
</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-04-13T02:58:26.365576" elapsed="0.000085"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.365237" elapsed="0.000527"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.351384" elapsed="0.014433"/>
</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-04-13T02:58:26.373827" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.368292" elapsed="0.005644"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.367792" elapsed="0.006220"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.367744" elapsed="0.006428"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.377581" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.374798" elapsed="0.002843"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.374305" elapsed="0.003373"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.374267" elapsed="0.003436"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.378286" 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-04-13T02:58:26.377871" elapsed="0.000442"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.378605" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.378385" elapsed="0.000294"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.379199" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.378853" elapsed="0.000373"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.378704" elapsed="0.000558"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.378367" elapsed="0.000916"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.379809" 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-04-13T02:58:26.379425" elapsed="0.000410"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.380119" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.379905" elapsed="0.000270"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.380643" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.380339" elapsed="0.000332"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.380198" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.379887" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.380867" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:26.381682" 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-04-13T02:58:26.381363" elapsed="0.000345"/>
</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-04-13T02:58:26.381849" elapsed="0.002429"/>
</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-04-13T02:58:26.366683" elapsed="0.017664"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:26.384533" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-13T02:58:26.384422" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.384403" 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-04-13T02:58:26.384781" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:26.384851" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:26.387149" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:26.344861" elapsed="0.042316"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:26.387232" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:26.387387" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:26.343087" elapsed="0.044326"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.387874" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.387559" elapsed="0.000342"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.388883" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:26.388457" elapsed="0.000454"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:26.388959" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:26.389176" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:26.388118" elapsed="0.001084"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.389599" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.389344" elapsed="0.000317"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.393470" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.389799" elapsed="0.003700"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:26.411427" elapsed="0.000553"/>
</kw>
<msg time="2026-04-13T02:58:26.412054" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.411058" elapsed="0.001068"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.410598" elapsed="0.001627"/>
</kw>
<msg time="2026-04-13T02:58:26.412271" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.402279" elapsed="0.010053"/>
</kw>
<msg time="2026-04-13T02:58:26.412442" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.401819" elapsed="0.010648"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.412873" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.412615" elapsed="0.000283"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:26.412951" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:26.413152" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:26.413207" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:26.338571" elapsed="0.074660"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.413645" level="INFO">19</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.413383" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:26.413922" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:26.413770" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.413748" elapsed="0.000241"/>
</if>
<var name="${i}">19</var>
<status status="PASS" start="2026-04-13T02:58:26.338364" elapsed="0.075650"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:26.420075" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.419769" elapsed="0.000332"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:26.420148" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:26.420299" 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-04-13T02:58:26.419420" elapsed="0.000904"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.426759" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.426490" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.427214" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.426967" 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-04-13T02:58:26.443333" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:26.443682" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:26.444073" 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-04-13T02:58:26.429344" elapsed="0.014790"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.427329" elapsed="0.016916"/>
</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-04-13T02:58:26.444723" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.444311" elapsed="0.000560"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.427308" elapsed="0.017611"/>
</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-04-13T02:58:26.452685" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.447598" elapsed="0.005170"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.447076" elapsed="0.005748"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.447024" elapsed="0.005841"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.456690" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.453287" elapsed="0.003476"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.452957" elapsed="0.003859"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.452930" elapsed="0.003925"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.457738" 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-04-13T02:58:26.457109" elapsed="0.000669"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.458214" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.457886" elapsed="0.000413"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.459085" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.458549" elapsed="0.000574"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.458334" elapsed="0.000843"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.457857" elapsed="0.001351"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.459900" 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-04-13T02:58:26.459420" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.460221" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.460001" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.460752" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.460443" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.460301" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.459982" elapsed="0.000852"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.461133" elapsed="0.000351"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:26.461958" 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-04-13T02:58:26.461649" 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-04-13T02:58:26.462123" elapsed="0.002621"/>
</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-04-13T02:58:26.445756" elapsed="0.019063"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:26.465017" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-13T02:58:26.464900" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.464877" 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-04-13T02:58:26.465262" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:26.465332" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:26.467603" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:26.420711" elapsed="0.046937"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:26.467709" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:26.467956" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:26.418848" elapsed="0.049135"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.468482" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.468142" elapsed="0.000367"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.469535" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:26.469114" elapsed="0.000449"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:26.469613" elapsed="0.000047"/>
</return>
<msg time="2026-04-13T02:58:26.469792" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:26.468752" elapsed="0.001066"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.470226" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.469964" elapsed="0.000309"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.474027" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.470410" elapsed="0.003646"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:26.491789" elapsed="0.000533"/>
</kw>
<msg time="2026-04-13T02:58:26.492394" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.491350" elapsed="0.001111"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.490795" elapsed="0.001746"/>
</kw>
<msg time="2026-04-13T02:58:26.492586" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.482476" elapsed="0.010187"/>
</kw>
<msg time="2026-04-13T02:58:26.492803" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.482033" elapsed="0.010797"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.493202" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.492981" elapsed="0.000246"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:26.493279" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:26.493479" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:26.493534" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:26.414374" elapsed="0.079185"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.493985" level="INFO">20</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.493731" elapsed="0.000299"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:26.494264" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:26.494106" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.494085" elapsed="0.000245"/>
</if>
<var name="${i}">20</var>
<status status="PASS" start="2026-04-13T02:58:26.414168" elapsed="0.080186"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:26.501052" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.500690" elapsed="0.000394"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:26.501283" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T02:58:26.501460" 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-04-13T02:58:26.500312" elapsed="0.001173"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.508591" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.508246" elapsed="0.000423"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.509065" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.508818" 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-04-13T02:58:26.524379" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:26.524618" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:26.524881" 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-04-13T02:58:26.511231" elapsed="0.013710"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.509190" elapsed="0.015858"/>
</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-04-13T02:58:26.525483" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.525115" elapsed="0.000541"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.509165" elapsed="0.016544"/>
</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-04-13T02:58:26.533480" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.528091" elapsed="0.005519"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.527573" elapsed="0.006165"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.527527" elapsed="0.006277"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.537536" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.534487" elapsed="0.003114"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.533961" elapsed="0.003704"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.533913" elapsed="0.003784"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.538380" 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-04-13T02:58:26.537916" elapsed="0.000493"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.538757" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.538490" elapsed="0.000327"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.539328" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.539008" elapsed="0.000346"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.538842" elapsed="0.000549"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.538468" elapsed="0.000944"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.539971" 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-04-13T02:58:26.539559" elapsed="0.000439"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.540291" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.540071" elapsed="0.000278"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.540843" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.540516" elapsed="0.000353"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.540373" elapsed="0.000531"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.540052" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.541075" elapsed="0.000355"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:26.541900" 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-04-13T02:58:26.541579" elapsed="0.000348"/>
</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-04-13T02:58:26.542066" elapsed="0.002723"/>
</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-04-13T02:58:26.526515" elapsed="0.018437"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:26.545175" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-13T02:58:26.545048" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.545020" elapsed="0.000255"/>
</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-04-13T02:58:26.545445" elapsed="0.000025"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:26.545519" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:26.547916" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:26.501974" elapsed="0.045977"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:26.548017" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T02:58:26.548192" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:26.499638" elapsed="0.048580"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.548788" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.548402" elapsed="0.000414"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.549876" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:26.549409" elapsed="0.000497"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:26.549956" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:58:26.550126" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:26.549040" elapsed="0.001113"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.550564" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.550299" elapsed="0.000311"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.554441" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.550768" elapsed="0.003713"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:26.572668" elapsed="0.000537"/>
</kw>
<msg time="2026-04-13T02:58:26.573275" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.572233" elapsed="0.001108"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.571702" elapsed="0.001720"/>
</kw>
<msg time="2026-04-13T02:58:26.573467" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.563327" elapsed="0.010185"/>
</kw>
<msg time="2026-04-13T02:58:26.573622" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.562784" elapsed="0.010903"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.574077" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.573857" elapsed="0.000245"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:26.574153" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:26.574430" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:26.574487" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:26.494740" elapsed="0.079773"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.574942" level="INFO">21</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.574680" elapsed="0.000306"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:26.575263" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:26.575097" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.575074" elapsed="0.000257"/>
</if>
<var name="${i}">21</var>
<status status="PASS" start="2026-04-13T02:58:26.494508" elapsed="0.080848"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:26.581783" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.581406" elapsed="0.000412"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:26.581879" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T02:58:26.582046" 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-04-13T02:58:26.581048" elapsed="0.001023"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.588999" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.588644" elapsed="0.000412"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.589455" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.589209" 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-04-13T02:58:26.602590" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:26.602929" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:26.603228" 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-04-13T02:58:26.591890" elapsed="0.011400"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.589581" 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-04-13T02:58:26.603878" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.603468" elapsed="0.000556"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.589556" elapsed="0.014515"/>
</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-04-13T02:58:26.612014" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.606676" elapsed="0.005410"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.606127" elapsed="0.006010"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.606077" elapsed="0.006093"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.614914" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.612522" elapsed="0.002455"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.612251" elapsed="0.002803"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.612227" elapsed="0.002864"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.615794" 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-04-13T02:58:26.615315" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.616132" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.615901" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.616689" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.616361" elapsed="0.000355"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.616215" elapsed="0.000536"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.615879" elapsed="0.000895"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.617294" 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-04-13T02:58:26.616919" elapsed="0.000402"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.617722" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.617480" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.618251" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.617950" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.617806" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.617460" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.618487" elapsed="0.000376"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:26.619379" 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-04-13T02:58:26.619073" elapsed="0.000333"/>
</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-04-13T02:58:26.619548" elapsed="0.002573"/>
</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-04-13T02:58:26.604981" elapsed="0.017218"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:26.622410" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-13T02:58:26.622290" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.622264" 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-04-13T02:58:26.622714" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:26.622800" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:26.625070" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:26.582409" elapsed="0.042692"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:26.625157" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:26.625349" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:26.580328" elapsed="0.045057"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.625975" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.625588" elapsed="0.000415"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.627081" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:26.626589" elapsed="0.000521"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:26.627160" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:26.627321" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:26.626227" elapsed="0.001120"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.627768" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.627490" elapsed="0.000324"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.631473" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.627950" elapsed="0.003553"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:26.649077" elapsed="0.000524"/>
</kw>
<msg time="2026-04-13T02:58:26.649791" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.648669" elapsed="0.001194"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.648142" elapsed="0.001802"/>
</kw>
<msg time="2026-04-13T02:58:26.649990" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.639848" elapsed="0.010188"/>
</kw>
<msg time="2026-04-13T02:58:26.650147" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.639376" elapsed="0.010796"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.650535" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.650320" elapsed="0.000241"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:26.650612" elapsed="0.000051"/>
</return>
<msg time="2026-04-13T02:58:26.650829" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:26.650884" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:26.575754" elapsed="0.075155"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.651360" level="INFO">22</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.651106" elapsed="0.000298"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:26.651651" elapsed="0.000020"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:26.651481" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.651460" elapsed="0.000268"/>
</if>
<var name="${i}">22</var>
<status status="PASS" start="2026-04-13T02:58:26.575512" elapsed="0.076241"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:26.657965" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.657566" elapsed="0.000430"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:26.658050" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:26.658211" 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-04-13T02:58:26.657233" elapsed="0.001002"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.664674" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.664354" elapsed="0.000374"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.665118" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.664873" 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-04-13T02:58:26.680897" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:26.681319" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:26.681589" 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-04-13T02:58:26.667216" elapsed="0.014468"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.665239" elapsed="0.016559"/>
</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-04-13T02:58:26.682243" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.681878" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.665216" elapsed="0.017219"/>
</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-04-13T02:58:26.690159" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.684884" elapsed="0.005385"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.684375" elapsed="0.005971"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.684332" elapsed="0.006199"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.693750" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.691232" elapsed="0.002567"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.690696" elapsed="0.003140"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.690655" elapsed="0.003206"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.694451" 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-04-13T02:58:26.694039" elapsed="0.000439"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.694797" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.694551" elapsed="0.000306"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.695345" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.695028" elapsed="0.000345"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.694882" elapsed="0.000527"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.694532" elapsed="0.000899"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.695957" 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-04-13T02:58:26.695572" elapsed="0.000412"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.696269" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.696055" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.696798" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.696492" elapsed="0.000333"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.696350" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.696036" elapsed="0.000845"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.697024" elapsed="0.000344"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:26.697832" 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-04-13T02:58:26.697518" 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-04-13T02:58:26.697997" elapsed="0.002428"/>
</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-04-13T02:58:26.683355" elapsed="0.017140"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:26.700703" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-13T02:58:26.700571" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.700551" elapsed="0.000253"/>
</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-04-13T02:58:26.700947" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:26.701016" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:26.703254" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:26.658559" elapsed="0.044724"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:26.703336" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:26.703490" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:26.656647" elapsed="0.046869"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.703992" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.703682" elapsed="0.000337"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.705012" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:26.704584" elapsed="0.000456"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:26.705087" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.705321" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:26.704240" elapsed="0.001108"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.705773" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.705493" elapsed="0.000328"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.709560" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.705961" elapsed="0.003628"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:26.728182" elapsed="0.000568"/>
</kw>
<msg time="2026-04-13T02:58:26.728820" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.727756" elapsed="0.001132"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.727239" elapsed="0.001730"/>
</kw>
<msg time="2026-04-13T02:58:26.729015" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.718409" elapsed="0.010652"/>
</kw>
<msg time="2026-04-13T02:58:26.729171" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.717819" elapsed="0.011378"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.729560" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.729344" elapsed="0.000243"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:26.729655" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:26.729860" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:26.729913" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:26.652120" elapsed="0.077817"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.730338" level="INFO">23</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.730088" elapsed="0.000298"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:26.730620" elapsed="0.000037"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:26.730465" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.730443" elapsed="0.000267"/>
</if>
<var name="${i}">23</var>
<status status="PASS" start="2026-04-13T02:58:26.651908" elapsed="0.078827"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:26.737045" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.736711" elapsed="0.000363"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:26.737128" elapsed="0.000038"/>
</return>
<msg time="2026-04-13T02:58:26.737291" 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-04-13T02:58:26.736356" elapsed="0.000960"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.744325" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.743888" elapsed="0.000512"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.744938" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.744596" elapsed="0.000396"/>
</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-04-13T02:58:26.759522" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:26.759787" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:26.760067" 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-04-13T02:58:26.747457" elapsed="0.012652"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.745084" elapsed="0.015101"/>
</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-04-13T02:58:26.760491" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.760230" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.745058" 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-04-13T02:58:26.765934" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.762291" elapsed="0.003727"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.761936" elapsed="0.004142"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.761906" elapsed="0.004214"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.769318" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.766566" elapsed="0.002804"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.766221" elapsed="0.003188"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.766190" elapsed="0.003246"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.770067" 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-04-13T02:58:26.769644" elapsed="0.000450"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.770393" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.770169" elapsed="0.000281"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.770942" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.770618" elapsed="0.000350"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.770474" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.770149" elapsed="0.000876"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.771557" 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-04-13T02:58:26.771190" elapsed="0.000393"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.771888" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.771671" elapsed="0.000273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.772445" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.772143" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.771968" elapsed="0.000540"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.771651" elapsed="0.000877"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.772694" elapsed="0.000353"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:26.773498" 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-04-13T02:58:26.773197" elapsed="0.000327"/>
</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-04-13T02:58:26.773681" elapsed="0.003786"/>
</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-04-13T02:58:26.761235" elapsed="0.016320"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:26.777787" elapsed="0.000044"/>
</return>
<status status="PASS" start="2026-04-13T02:58:26.777663" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.777619" 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-04-13T02:58:26.778059" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:26.778134" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:26.780419" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:26.737661" elapsed="0.042788"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:26.780503" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:26.780755" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:26.735762" elapsed="0.045021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.781277" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.780939" elapsed="0.000367"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.782360" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:26.781928" elapsed="0.000460"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:26.782438" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:26.782597" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:26.781528" elapsed="0.001110"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.783056" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.782794" elapsed="0.000329"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.786850" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.783262" elapsed="0.003621"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:26.804253" elapsed="0.000561"/>
</kw>
<msg time="2026-04-13T02:58:26.804876" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.803881" elapsed="0.001058"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.803485" elapsed="0.001532"/>
</kw>
<msg time="2026-04-13T02:58:26.805061" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.795273" elapsed="0.009833"/>
</kw>
<msg time="2026-04-13T02:58:26.805269" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.794876" elapsed="0.010465"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.805902" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.805578" elapsed="0.000350"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:26.805980" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:26.806180" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:26.806234" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:26.731216" elapsed="0.075043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.806724" level="INFO">24</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.806436" elapsed="0.000333"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:26.806998" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:26.806848" elapsed="0.000237"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.806827" elapsed="0.000283"/>
</if>
<var name="${i}">24</var>
<status status="PASS" start="2026-04-13T02:58:26.730946" elapsed="0.076213"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:26.813382" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.813055" elapsed="0.000355"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:26.813463" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:58:26.813623" 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-04-13T02:58:26.812717" elapsed="0.000953"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.820329" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.820062" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.820782" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.820516" elapsed="0.000309"/>
</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-04-13T02:58:26.834920" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:26.835112" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:26.835295" 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-04-13T02:58:26.822897" elapsed="0.012435"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.820904" elapsed="0.014489"/>
</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-04-13T02:58:26.835657" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.835432" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.820880" elapsed="0.014910"/>
</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-04-13T02:58:26.840443" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.837212" elapsed="0.003298"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.836918" elapsed="0.003639"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.836892" elapsed="0.003700"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.843988" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.840981" elapsed="0.003057"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.840692" elapsed="0.003398"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.840667" elapsed="0.003461"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.844725" 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-04-13T02:58:26.844306" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.845041" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.844822" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.845577" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.845266" elapsed="0.000337"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.845122" elapsed="0.000532"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.844804" elapsed="0.000872"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.846178" 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-04-13T02:58:26.845818" elapsed="0.000386"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.846486" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.846273" elapsed="0.000270"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.847020" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.846729" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.846567" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.846255" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.847269" elapsed="0.000419"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:26.848235" 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-04-13T02:58:26.847870" elapsed="0.000392"/>
</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-04-13T02:58:26.848449" elapsed="0.002895"/>
</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-04-13T02:58:26.836295" elapsed="0.015181"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:26.851678" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-13T02:58:26.851549" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.851529" 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-04-13T02:58:26.851918" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:26.851989" elapsed="0.000150"/>
</return>
<msg time="2026-04-13T02:58:26.854356" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:26.814098" elapsed="0.040286"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:26.854439" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:26.854600" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:26.812159" elapsed="0.042504"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.855117" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.854817" elapsed="0.000366"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.856158" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:26.855750" elapsed="0.000437"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:26.856236" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:26.856396" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:26.855399" elapsed="0.001023"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.856841" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.856566" elapsed="0.000322"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.861028" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.857030" elapsed="0.004027"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:26.878193" elapsed="0.000525"/>
</kw>
<msg time="2026-04-13T02:58:26.878775" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.877845" elapsed="0.000989"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.877456" elapsed="0.001455"/>
</kw>
<msg time="2026-04-13T02:58:26.878954" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.869376" elapsed="0.009622"/>
</kw>
<msg time="2026-04-13T02:58:26.879100" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.869050" elapsed="0.010075"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.879493" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.879286" elapsed="0.000232"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:26.879567" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:26.879837" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:26.879891" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:26.807577" elapsed="0.072339"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.880311" level="INFO">25</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.880066" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:26.880577" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:26.880429" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.880409" elapsed="0.000252"/>
</if>
<var name="${i}">25</var>
<status status="PASS" start="2026-04-13T02:58:26.807324" elapsed="0.073362"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:26.886607" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.886305" elapsed="0.000344"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:26.886699" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:26.886854" 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-04-13T02:58:26.885973" elapsed="0.000906"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.893203" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.892942" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.893643" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.893388" elapsed="0.000300"/>
</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-04-13T02:58:26.907005" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:26.907200" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:26.907324" 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-04-13T02:58:26.895737" elapsed="0.011614"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.893761" elapsed="0.013641"/>
</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-04-13T02:58:26.907603" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.907433" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.893740" elapsed="0.013980"/>
</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-04-13T02:58:26.911160" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.908821" elapsed="0.002403"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.908580" elapsed="0.002677"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.908559" elapsed="0.002723"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.913724" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.911544" elapsed="0.002226"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.911338" elapsed="0.002467"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.911322" elapsed="0.002507"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.914381" 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-04-13T02:58:26.913989" elapsed="0.000419"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.914712" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.914477" elapsed="0.000294"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.915276" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.914942" elapsed="0.000361"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.914796" elapsed="0.000542"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.914459" elapsed="0.000902"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.915883" 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-04-13T02:58:26.915502" elapsed="0.000407"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.916270" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.916052" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.916808" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.916494" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.916351" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.916034" elapsed="0.000856"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.917031" elapsed="0.000350"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:26.917840" 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-04-13T02:58:26.917531" 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-04-13T02:58:26.918006" elapsed="0.002380"/>
</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-04-13T02:58:26.908114" elapsed="0.012339"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:26.920651" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T02:58:26.920524" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.920505" 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-04-13T02:58:26.920882" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:26.920952" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:26.923150" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:26.887230" elapsed="0.035970"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:26.923255" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.923408" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:26.885428" elapsed="0.038005"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.923884" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.923577" elapsed="0.000333"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.924851" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:26.924438" elapsed="0.000441"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:26.924927" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:26.925085" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:26.924111" elapsed="0.001000"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.925503" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.925252" elapsed="0.000296"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.929228" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.925698" elapsed="0.003557"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:26.947501" elapsed="0.000511"/>
</kw>
<msg time="2026-04-13T02:58:26.948131" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.947136" elapsed="0.001055"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.946762" elapsed="0.001505"/>
</kw>
<msg time="2026-04-13T02:58:26.948311" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.937995" elapsed="0.010360"/>
</kw>
<msg time="2026-04-13T02:58:26.948457" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:26.937581" elapsed="0.010900"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.948852" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.948624" elapsed="0.000253"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:26.948925" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:26.949120" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:26.949172" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:26.881034" elapsed="0.068163"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.949586" level="INFO">26</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.949343" elapsed="0.000302"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:26.949867" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:26.949721" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.949701" elapsed="0.000235"/>
</if>
<var name="${i}">26</var>
<status status="PASS" start="2026-04-13T02:58:26.880837" elapsed="0.069124"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:26.955898" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.955581" elapsed="0.000344"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:26.955970" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:26.956118" 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-04-13T02:58:26.955252" elapsed="0.000890"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.962556" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.962311" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.962994" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.962752" elapsed="0.000285"/>
</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-04-13T02:58:26.977764" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:26.977895" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:26.977991" 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-04-13T02:58:26.965058" elapsed="0.012959"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.963104" elapsed="0.014955"/>
</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-04-13T02:58:26.978223" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.978085" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.963086" elapsed="0.015223"/>
</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-04-13T02:58:26.981855" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.979549" elapsed="0.002354"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.979093" elapsed="0.002844"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.979074" elapsed="0.002939"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.984461" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.982284" elapsed="0.002223"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.982077" elapsed="0.002464"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.982059" elapsed="0.002507"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.985117" 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-04-13T02:58:26.984733" elapsed="0.000411"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.985431" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.985215" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.985975" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.985674" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.985513" elapsed="0.000523"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.985197" elapsed="0.000860"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.986559" 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-04-13T02:58:26.986199" elapsed="0.000386"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:26.986886" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:26.986671" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.987499" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.987128" elapsed="0.000398"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:26.986967" elapsed="0.000595"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.986652" elapsed="0.000931"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:26.987738" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:26.988520" 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-04-13T02:58:26.988234" elapsed="0.000311"/>
</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-04-13T02:58:26.988701" elapsed="0.002314"/>
</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-04-13T02:58:26.978677" elapsed="0.012401"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:26.991278" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-13T02:58:26.991148" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:26.991130" 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-04-13T02:58:26.991493" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:26.991564" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:26.993816" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:26.956461" elapsed="0.037383"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:26.993896" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:26.994047" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:26.954715" elapsed="0.039358"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.994509" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:26.994217" elapsed="0.000320"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.995504" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:26.995073" elapsed="0.000460"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:26.995581" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:26.995796" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:26.994753" elapsed="0.001070"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:26.996224" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:26.995966" elapsed="0.000305"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:26.999948" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:26.996407" elapsed="0.003568"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:27.017344" elapsed="0.000512"/>
</kw>
<msg time="2026-04-13T02:58:27.017908" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.016993" elapsed="0.000968"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.016534" elapsed="0.001502"/>
</kw>
<msg time="2026-04-13T02:58:27.018081" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.008299" elapsed="0.009826"/>
</kw>
<msg time="2026-04-13T02:58:27.018227" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.007987" elapsed="0.010265"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.018596" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.018395" elapsed="0.000227"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:27.018687" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.018874" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:27.018926" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:26.950306" elapsed="0.068644"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.019362" level="INFO">27</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.019098" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:27.019617" elapsed="0.000032"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:27.019479" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.019460" elapsed="0.000238"/>
</if>
<var name="${i}">27</var>
<status status="PASS" start="2026-04-13T02:58:26.950111" elapsed="0.069614"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:27.025714" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.025379" elapsed="0.000363"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:27.025789" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:27.025944" 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-04-13T02:58:27.025044" elapsed="0.000924"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.032303" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.032051" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.032750" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.032488" elapsed="0.000306"/>
</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-04-13T02:58:27.045935" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:27.046157" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:27.046408" 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-04-13T02:58:27.034798" elapsed="0.011654"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.032864" elapsed="0.013670"/>
</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-04-13T02:58:27.046854" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.046585" elapsed="0.000384"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.032845" elapsed="0.014160"/>
</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-04-13T02:58:27.051816" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.048591" elapsed="0.003295"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.048301" elapsed="0.003633"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.048273" elapsed="0.003695"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.055408" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.052336" elapsed="0.003137"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.052046" elapsed="0.003476"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.052023" elapsed="0.003533"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.056200" 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-04-13T02:58:27.055797" elapsed="0.000430"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.056515" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.056297" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.057055" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.056755" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.056596" elapsed="0.000521"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.056279" elapsed="0.000859"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.057658" 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-04-13T02:58:27.057279" elapsed="0.000408"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.058100" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.057758" elapsed="0.000399"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.058614" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.058322" elapsed="0.000333"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.058180" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.057740" elapsed="0.000972"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.058850" elapsed="0.000347"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:27.059686" 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-04-13T02:58:27.059376" 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-04-13T02:58:27.059852" elapsed="0.002325"/>
</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-04-13T02:58:27.047644" elapsed="0.014596"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:27.062415" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-13T02:58:27.062310" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.062291" 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-04-13T02:58:27.062648" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:27.062719" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:27.064960" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:27.026282" elapsed="0.038707"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:27.065041" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.065230" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:27.024482" elapsed="0.040774"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.065710" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.065401" elapsed="0.000337"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.066674" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:27.066259" elapsed="0.000445"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:27.066758" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.066915" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:27.065939" elapsed="0.001001"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.067369" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.067084" elapsed="0.000337"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.071083" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.067567" elapsed="0.003545"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:27.088272" elapsed="0.000528"/>
</kw>
<msg time="2026-04-13T02:58:27.088852" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.087927" elapsed="0.000978"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.087541" elapsed="0.001451"/>
</kw>
<msg time="2026-04-13T02:58:27.089036" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.079401" elapsed="0.009679"/>
</kw>
<msg time="2026-04-13T02:58:27.089182" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.079050" elapsed="0.010156"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.089545" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.089346" elapsed="0.000224"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:27.089615" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T02:58:27.089820" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:27.089871" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:27.020046" elapsed="0.069849"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.090283" level="INFO">28</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.090043" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:27.090529" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:27.090391" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.090373" elapsed="0.000221"/>
</if>
<var name="${i}">28</var>
<status status="PASS" start="2026-04-13T02:58:27.019861" elapsed="0.070756"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:27.096503" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.096204" elapsed="0.000326"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:27.096575" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.096739" 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-04-13T02:58:27.095874" elapsed="0.000890"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.103045" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.102799" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.103497" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.103228" elapsed="0.000312"/>
</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-04-13T02:58:27.117966" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:27.118078" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:27.118171" 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-04-13T02:58:27.105535" elapsed="0.012662"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.103607" elapsed="0.014631"/>
</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-04-13T02:58:27.118402" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.118264" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.103588" elapsed="0.014896"/>
</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-04-13T02:58:27.125678" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.120559" elapsed="0.005229"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.120103" elapsed="0.005762"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.119955" elapsed="0.005964"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.129390" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.126503" elapsed="0.002933"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.126043" elapsed="0.003426"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.126006" elapsed="0.003487"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.130028" 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-04-13T02:58:27.129650" elapsed="0.000404"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.130340" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.130124" elapsed="0.000273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.130874" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.130560" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.130420" elapsed="0.000515"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.130106" elapsed="0.000850"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.131465" 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-04-13T02:58:27.131097" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.131790" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.131559" elapsed="0.000287"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.132303" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.132010" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.131870" elapsed="0.000494"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.131541" elapsed="0.000844"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.132518" elapsed="0.000386"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:27.133325" 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-04-13T02:58:27.133053" elapsed="0.000297"/>
</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-04-13T02:58:27.133488" elapsed="0.002345"/>
</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-04-13T02:58:27.118994" elapsed="0.016936"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:27.136108" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-13T02:58:27.136001" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.135982" 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-04-13T02:58:27.136326" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:27.136396" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:27.138617" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:27.097111" elapsed="0.041549"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:27.138712" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:27.138868" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:27.095341" elapsed="0.043553"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.139352" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.139037" elapsed="0.000343"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.140298" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:27.139910" elapsed="0.000416"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:27.140373" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.140529" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:27.139576" elapsed="0.000978"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.140964" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.140712" elapsed="0.000298"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.144684" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.141146" elapsed="0.003566"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:27.161719" elapsed="0.000459"/>
</kw>
<msg time="2026-04-13T02:58:27.162229" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.161359" elapsed="0.000919"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.160988" elapsed="0.001364"/>
</kw>
<msg time="2026-04-13T02:58:27.162394" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.152904" elapsed="0.009534"/>
</kw>
<msg time="2026-04-13T02:58:27.162538" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.152586" elapsed="0.009975"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.162928" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.162725" elapsed="0.000227"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:27.162998" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.163230" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:27.163281" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:27.090962" elapsed="0.072343"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.163739" level="INFO">29</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.163477" elapsed="0.000306"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:27.163986" elapsed="0.000015"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:27.163849" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.163831" elapsed="0.000217"/>
</if>
<var name="${i}">29</var>
<status status="PASS" start="2026-04-13T02:58:27.090774" elapsed="0.073297"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:27.170030" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.169732" elapsed="0.000325"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:27.170104" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.170251" 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-04-13T02:58:27.169386" elapsed="0.000889"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.176703" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.176396" elapsed="0.000354"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.177146" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.176898" 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-04-13T02:58:27.190500" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:27.190805" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:27.191025" 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-04-13T02:58:27.179202" elapsed="0.011882"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.177258" elapsed="0.013924"/>
</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-04-13T02:58:27.191596" elapsed="0.000080"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.191241" elapsed="0.000537"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.177240" elapsed="0.014586"/>
</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-04-13T02:58:27.199169" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.194061" elapsed="0.005215"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.193561" elapsed="0.005838"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.193518" elapsed="0.005939"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.202060" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.199892" elapsed="0.002214"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.199583" elapsed="0.002557"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.199547" elapsed="0.002617"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.202695" 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-04-13T02:58:27.202309" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.203003" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.202790" elapsed="0.000270"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.203538" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.203224" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.203084" elapsed="0.000514"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.202772" elapsed="0.000848"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.204133" 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-04-13T02:58:27.203776" elapsed="0.000383"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.204485" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.204268" elapsed="0.000273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.205015" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.204722" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.204565" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.204249" elapsed="0.000848"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.205232" elapsed="0.000341"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:27.206020" 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-04-13T02:58:27.205743" elapsed="0.000303"/>
</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-04-13T02:58:27.206184" elapsed="0.003395"/>
</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-04-13T02:58:27.192587" elapsed="0.017071"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:27.209837" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-13T02:58:27.209730" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.209711" elapsed="0.000214"/>
</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-04-13T02:58:27.210056" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:27.210126" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:27.212324" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:27.170586" elapsed="0.041766"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:27.212403" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.212552" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:27.168860" elapsed="0.043718"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.213025" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.212735" elapsed="0.000317"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.213975" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:27.213569" elapsed="0.000435"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:27.214052" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.214208" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:27.213251" elapsed="0.000983"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.214640" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.214376" elapsed="0.000312"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.218375" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.214828" elapsed="0.003574"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:27.235445" elapsed="0.000507"/>
</kw>
<msg time="2026-04-13T02:58:27.236055" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.235075" elapsed="0.001038"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.234679" elapsed="0.001510"/>
</kw>
<msg time="2026-04-13T02:58:27.236233" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.226569" elapsed="0.009708"/>
</kw>
<msg time="2026-04-13T02:58:27.236382" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.226262" elapsed="0.010145"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.236795" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.236558" elapsed="0.000263"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:27.236869" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:27.237063" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:27.237116" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:27.164383" elapsed="0.072757"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.237537" level="INFO">30</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.237291" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:27.237820" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:27.237669" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.237648" elapsed="0.000239"/>
</if>
<var name="${i}">30</var>
<status status="PASS" start="2026-04-13T02:58:27.164201" elapsed="0.073710"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:27.243848" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.243531" elapsed="0.000344"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:27.243921" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.244067" 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-04-13T02:58:27.243189" elapsed="0.000902"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.250769" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.250505" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.251191" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.250951" 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-04-13T02:58:27.266487" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:27.266797" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:27.267011" 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-04-13T02:58:27.253265" elapsed="0.013803"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.251300" elapsed="0.015863"/>
</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-04-13T02:58:27.267560" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.267218" elapsed="0.000516"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.251281" elapsed="0.016503"/>
</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-04-13T02:58:27.273839" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.269976" elapsed="0.003930"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.269485" elapsed="0.004468"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.269442" elapsed="0.004591"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.277641" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.274412" elapsed="0.003298"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.274119" elapsed="0.003640"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.274094" elapsed="0.003699"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.278527" 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-04-13T02:58:27.278003" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.278991" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.278685" elapsed="0.000387"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.279770" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.279303" elapsed="0.000493"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.279105" elapsed="0.000727"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.278659" elapsed="0.001193"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.280353" 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-04-13T02:58:27.279995" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.280677" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.280449" elapsed="0.000289"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.281195" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.280905" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.280765" elapsed="0.000491"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.280431" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.281410" elapsed="0.000356"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:27.282197" 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-04-13T02:58:27.281916" elapsed="0.000306"/>
</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-04-13T02:58:27.282360" elapsed="0.002378"/>
</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-04-13T02:58:27.268526" elapsed="0.016275"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:27.284977" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-13T02:58:27.284872" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.284853" elapsed="0.000207"/>
</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-04-13T02:58:27.285193" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:27.285262" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:27.287505" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:27.244404" elapsed="0.043130"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:27.287586" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:27.287754" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:27.242664" elapsed="0.045115"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.288245" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.287940" elapsed="0.000332"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.289205" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:27.288815" elapsed="0.000418"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:27.289280" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.289474" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:27.288481" elapsed="0.001019"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.289911" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.289656" elapsed="0.000301"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.293622" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.290093" elapsed="0.003572"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:27.310943" elapsed="0.000521"/>
</kw>
<msg time="2026-04-13T02:58:27.311516" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.310574" elapsed="0.000993"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.310201" elapsed="0.001463"/>
</kw>
<msg time="2026-04-13T02:58:27.311710" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.302044" elapsed="0.009710"/>
</kw>
<msg time="2026-04-13T02:58:27.311856" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.301734" elapsed="0.010147"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.312226" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.312024" elapsed="0.000228"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:27.312298" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.312483" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:27.312534" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:27.238259" elapsed="0.074299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.312970" level="INFO">31</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.312723" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:27.313216" elapsed="0.000015"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:27.313078" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.313061" elapsed="0.000218"/>
</if>
<var name="${i}">31</var>
<status status="PASS" start="2026-04-13T02:58:27.238062" elapsed="0.075240"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:27.319239" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.318927" elapsed="0.000339"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:27.319312" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.319504" 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-04-13T02:58:27.318578" elapsed="0.000953"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.325961" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.325707" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.326392" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.326146" 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-04-13T02:58:27.340861" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:27.341069" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:27.341326" 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-04-13T02:58:27.328495" elapsed="0.012872"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.326502" elapsed="0.014926"/>
</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-04-13T02:58:27.341689" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.341466" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.326484" elapsed="0.015327"/>
</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-04-13T02:58:27.346946" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.343373" elapsed="0.003647"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.343064" elapsed="0.004009"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.343033" elapsed="0.004077"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.350966" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.347530" elapsed="0.003510"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.347195" elapsed="0.003898"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.347170" elapsed="0.003963"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.352052" 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-04-13T02:58:27.351383" elapsed="0.000711"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.352586" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.352204" elapsed="0.000496"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.353398" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.352952" elapsed="0.000484"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.352736" elapsed="0.000753"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.352177" elapsed="0.001344"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.354335" 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-04-13T02:58:27.353754" elapsed="0.000621"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.354823" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.354479" elapsed="0.000429"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.355656" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.355151" elapsed="0.000546"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.354943" elapsed="0.000797"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.354453" elapsed="0.001308"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.355903" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:27.356728" 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-04-13T02:58:27.356401" elapsed="0.000353"/>
</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-04-13T02:58:27.356893" elapsed="0.002454"/>
</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-04-13T02:58:27.342373" elapsed="0.017063"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:27.359640" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-13T02:58:27.359513" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.359493" 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-04-13T02:58:27.359881" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:27.359951" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:27.362150" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:27.319868" elapsed="0.042311"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:27.362233" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.362470" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:27.318029" elapsed="0.044469"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.362967" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.362662" elapsed="0.000333"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.364174" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:27.363599" elapsed="0.000604"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:27.364253" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:58:27.364446" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:27.363213" elapsed="0.001260"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.364893" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.364618" elapsed="0.000323"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.368895" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.365241" elapsed="0.003701"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:27.386396" elapsed="0.000525"/>
</kw>
<msg time="2026-04-13T02:58:27.386976" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.386053" elapsed="0.000981"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.385681" elapsed="0.001427"/>
</kw>
<msg time="2026-04-13T02:58:27.387151" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.377357" elapsed="0.009838"/>
</kw>
<msg time="2026-04-13T02:58:27.387297" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.377039" elapsed="0.010282"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.387703" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.387482" elapsed="0.000246"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:27.387777" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:27.387969" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:27.388019" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:27.313618" elapsed="0.074426"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.388435" level="INFO">32</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.388192" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:27.388717" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:27.388549" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.388530" elapsed="0.000259"/>
</if>
<var name="${i}">32</var>
<status status="PASS" start="2026-04-13T02:58:27.313436" elapsed="0.075376"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:27.395217" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.394912" elapsed="0.000333"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:27.395291" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:27.395464" 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-04-13T02:58:27.394465" elapsed="0.001026"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.402566" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.402308" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.403020" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.402770" elapsed="0.000293"/>
</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-04-13T02:58:27.418213" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:27.418518" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:27.418772" 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-04-13T02:58:27.405120" elapsed="0.013710"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.403133" elapsed="0.015793"/>
</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-04-13T02:58:27.419300" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.418986" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.403113" elapsed="0.016414"/>
</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-04-13T02:58:27.427209" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.421795" elapsed="0.005521"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.421311" elapsed="0.006082"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.421270" elapsed="0.006178"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.430089" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.427914" elapsed="0.002220"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.427660" elapsed="0.002508"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.427596" elapsed="0.002597"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.430773" 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-04-13T02:58:27.430359" elapsed="0.000441"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.431089" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.430870" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.431643" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.431313" elapsed="0.000358"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.431170" elapsed="0.000537"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.430852" elapsed="0.000876"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.432230" 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-04-13T02:58:27.431869" elapsed="0.000387"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.432558" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.432325" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.433118" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.432822" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.432660" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.432307" elapsed="0.000894"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.433341" elapsed="0.000364"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:27.434154" 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-04-13T02:58:27.433855" elapsed="0.000325"/>
</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-04-13T02:58:27.434318" elapsed="0.002590"/>
</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-04-13T02:58:27.420341" elapsed="0.016728"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:27.437270" elapsed="0.000047"/>
</return>
<status status="PASS" start="2026-04-13T02:58:27.437150" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.437129" 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-04-13T02:58:27.437563" elapsed="0.000025"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:27.437672" elapsed="0.000021"/>
</return>
<msg time="2026-04-13T02:58:27.440231" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:27.395899" elapsed="0.044364"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:27.440319" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:27.440492" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:27.393929" elapsed="0.046596"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.441099" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.440710" elapsed="0.000417"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.442249" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:27.441791" elapsed="0.000488"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:27.442328" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.442499" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:27.441357" elapsed="0.001169"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.442953" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.442689" elapsed="0.000311"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.446743" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.443138" elapsed="0.003633"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:27.463977" elapsed="0.000510"/>
</kw>
<msg time="2026-04-13T02:58:27.464546" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.463607" elapsed="0.001002"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.463174" elapsed="0.001541"/>
</kw>
<msg time="2026-04-13T02:58:27.464760" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.455006" elapsed="0.009800"/>
</kw>
<msg time="2026-04-13T02:58:27.464911" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.454644" elapsed="0.010293"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.465448" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.465240" elapsed="0.000233"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:27.465523" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:27.465814" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:27.465867" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:27.389161" elapsed="0.076732"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.466296" level="INFO">33</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.466044" elapsed="0.000299"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:27.466569" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:27.466420" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.466398" elapsed="0.000258"/>
</if>
<var name="${i}">33</var>
<status status="PASS" start="2026-04-13T02:58:27.388967" elapsed="0.077715"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:27.472770" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.472449" elapsed="0.000348"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:27.472844" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:27.472991" 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-04-13T02:58:27.472117" elapsed="0.000899"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.479359" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.479110" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.479868" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.479595" elapsed="0.000318"/>
</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-04-13T02:58:27.493496" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:27.493714" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:27.493854" 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-04-13T02:58:27.481911" elapsed="0.011979"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.479983" elapsed="0.013966"/>
</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-04-13T02:58:27.494178" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.493984" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.479964" elapsed="0.014332"/>
</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-04-13T02:58:27.500792" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.495730" elapsed="0.005169"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.495383" elapsed="0.005591"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.495357" elapsed="0.005672"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.504998" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.501607" elapsed="0.003437"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.501152" elapsed="0.003926"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.501116" elapsed="0.003986"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.505650" 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-04-13T02:58:27.505255" elapsed="0.000423"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.505963" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.505747" elapsed="0.000273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.506480" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.506184" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.506043" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.505729" elapsed="0.000831"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.507074" 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-04-13T02:58:27.506715" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.507420" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.507205" elapsed="0.000271"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.507975" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.507676" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.507515" elapsed="0.000521"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.507186" elapsed="0.000871"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.508190" elapsed="0.000344"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:27.508994" 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-04-13T02:58:27.508700" 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-04-13T02:58:27.509158" elapsed="0.002362"/>
</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-04-13T02:58:27.494802" elapsed="0.016783"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:27.511779" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-13T02:58:27.511671" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.511650" elapsed="0.000213"/>
</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-04-13T02:58:27.511994" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:27.512064" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:27.514291" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:27.473332" elapsed="0.040987"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:27.514370" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:27.514520" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:27.471566" elapsed="0.042980"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.514993" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.514705" elapsed="0.000315"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.515964" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:27.515548" elapsed="0.000444"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:27.516039" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.516193" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:27.515215" elapsed="0.001004"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.516610" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.516362" elapsed="0.000312"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.520318" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.516808" elapsed="0.003537"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:27.537440" elapsed="0.000471"/>
</kw>
<msg time="2026-04-13T02:58:27.537996" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.537100" elapsed="0.000949"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.536731" elapsed="0.001392"/>
</kw>
<msg time="2026-04-13T02:58:27.538165" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.528611" elapsed="0.009598"/>
</kw>
<msg time="2026-04-13T02:58:27.538311" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.528305" elapsed="0.010030"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.538699" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.538476" elapsed="0.000249"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:27.538771" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:27.538953" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:27.539004" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:27.467027" elapsed="0.072001"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.539414" level="INFO">34</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.539174" elapsed="0.000283"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:27.539692" elapsed="0.000016"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:27.539537" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.539504" elapsed="0.000251"/>
</if>
<var name="${i}">34</var>
<status status="PASS" start="2026-04-13T02:58:27.466833" elapsed="0.072945"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:27.546157" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.545834" elapsed="0.000351"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:27.546238" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:27.546409" 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-04-13T02:58:27.545438" elapsed="0.000999"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.552778" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.552492" elapsed="0.000342"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.553215" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.552974" elapsed="0.000284"/>
</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-04-13T02:58:27.565984" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:27.566106" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:27.566200" 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-04-13T02:58:27.555352" elapsed="0.010873"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.553326" 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-04-13T02:58:27.566431" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.566293" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.553307" elapsed="0.013207"/>
</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-04-13T02:58:27.571060" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.567881" elapsed="0.003246"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.567571" elapsed="0.003603"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.567500" elapsed="0.003762"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.574772" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.571701" elapsed="0.003141"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.571348" elapsed="0.003543"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.571323" elapsed="0.003603"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.575726" 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-04-13T02:58:27.575130" elapsed="0.000636"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.576199" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.575841" elapsed="0.000416"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.576740" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.576424" elapsed="0.000342"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.576281" elapsed="0.000567"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.575823" elapsed="0.001048"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.577532" 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-04-13T02:58:27.577152" elapsed="0.000406"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.577873" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.577642" elapsed="0.000289"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.578387" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.578096" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.577955" elapsed="0.000504"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.577610" elapsed="0.000871"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.578615" elapsed="0.000357"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:27.579402" 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-04-13T02:58:27.579121" elapsed="0.000307"/>
</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-04-13T02:58:27.579583" elapsed="0.002327"/>
</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-04-13T02:58:27.566946" elapsed="0.015026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:27.582147" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-13T02:58:27.582042" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.582023" elapsed="0.000208"/>
</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-04-13T02:58:27.582361" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:27.582431" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:27.584683" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:27.546779" elapsed="0.037933"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:27.584764" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:27.584914" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:27.544826" elapsed="0.040114"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.585368" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.585083" elapsed="0.000311"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.586309" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:27.585922" elapsed="0.000415"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:27.586384" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.586578" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:27.585590" elapsed="0.001014"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.587013" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.586765" elapsed="0.000293"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.590776" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.587193" elapsed="0.003610"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:27.607865" elapsed="0.000489"/>
</kw>
<msg time="2026-04-13T02:58:27.608405" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.607437" elapsed="0.001020"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.607066" elapsed="0.001464"/>
</kw>
<msg time="2026-04-13T02:58:27.608573" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.599003" elapsed="0.009613"/>
</kw>
<msg time="2026-04-13T02:58:27.608745" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.598695" elapsed="0.010074"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.609109" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.608911" elapsed="0.000223"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:27.609180" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.609365" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:27.609416" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:27.540093" elapsed="0.069346"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.609852" level="INFO">35</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.609587" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:27.610100" elapsed="0.000016"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:27.609961" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.609943" elapsed="0.000222"/>
</if>
<var name="${i}">35</var>
<status status="PASS" start="2026-04-13T02:58:27.539910" elapsed="0.070279"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:27.616147" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.615851" elapsed="0.000322"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:27.616218" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.616364" 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-04-13T02:58:27.615490" elapsed="0.000898"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.622682" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.622422" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.623134" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.622885" 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-04-13T02:58:27.636842" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:27.637099" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:27.637384" 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-04-13T02:58:27.625203" elapsed="0.012271"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.623243" elapsed="0.014327"/>
</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-04-13T02:58:27.637994" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.637668" elapsed="0.000466"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.623224" elapsed="0.014956"/>
</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-04-13T02:58:27.647080" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.640481" elapsed="0.006747"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.640020" elapsed="0.007297"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.639974" elapsed="0.007409"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.650714" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.648160" elapsed="0.002599"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.647531" elapsed="0.003262"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.647487" elapsed="0.003330"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.651386" 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-04-13T02:58:27.650990" elapsed="0.000423"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.651747" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.651483" elapsed="0.000324"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.652274" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.651976" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.651830" elapsed="0.000505"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.651465" elapsed="0.000891"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.652876" 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-04-13T02:58:27.652497" elapsed="0.000406"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.653185" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.652972" elapsed="0.000270"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.653712" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.653407" elapsed="0.000332"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.653266" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.652955" elapsed="0.000840"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.653931" elapsed="0.000358"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:27.654765" 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-04-13T02:58:27.654438" elapsed="0.000353"/>
</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-04-13T02:58:27.654931" elapsed="0.003461"/>
</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-04-13T02:58:27.638971" elapsed="0.019488"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:27.658652" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T02:58:27.658530" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.658511" elapsed="0.000234"/>
</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-04-13T02:58:27.658879" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:27.658950" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:27.661199" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:27.616714" elapsed="0.044514"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:27.661282" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.661518" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:27.614970" elapsed="0.046575"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.661994" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.661705" elapsed="0.000316"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.662961" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:27.662547" elapsed="0.000442"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:27.663038" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.663195" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:27.662225" elapsed="0.000996"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.663664" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.663363" elapsed="0.000350"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.667336" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.663849" elapsed="0.003515"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:27.684816" elapsed="0.000492"/>
</kw>
<msg time="2026-04-13T02:58:27.685361" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.684454" elapsed="0.000961"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.684081" elapsed="0.001408"/>
</kw>
<msg time="2026-04-13T02:58:27.685531" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.675557" elapsed="0.010018"/>
</kw>
<msg time="2026-04-13T02:58:27.685705" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.675250" elapsed="0.010480"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.686075" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.685874" elapsed="0.000226"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:27.686146" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:27.686330" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:27.686382" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:27.610512" elapsed="0.075894"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.686816" level="INFO">36</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.686551" elapsed="0.000321"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:27.687205" elapsed="0.000016"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:27.686944" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.686926" elapsed="0.000345"/>
</if>
<var name="${i}">36</var>
<status status="PASS" start="2026-04-13T02:58:27.610326" elapsed="0.076968"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:27.693271" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.692974" elapsed="0.000323"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:27.693343" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.693490" 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-04-13T02:58:27.692640" elapsed="0.000874"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.699835" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.699543" elapsed="0.000337"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.700259" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.700018" elapsed="0.000283"/>
</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-04-13T02:58:27.713180" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:27.713343" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:27.713475" 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-04-13T02:58:27.702299" elapsed="0.011212"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.700367" elapsed="0.013204"/>
</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-04-13T02:58:27.713833" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.713607" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.700348" elapsed="0.013661"/>
</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-04-13T02:58:27.718552" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.715378" elapsed="0.003242"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.715091" elapsed="0.003596"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.715065" elapsed="0.003656"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.722133" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.719091" elapsed="0.003106"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.718803" elapsed="0.003440"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.718781" elapsed="0.003496"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.723026" 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-04-13T02:58:27.722479" elapsed="0.000585"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.723464" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.723160" elapsed="0.000384"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.724254" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.723836" elapsed="0.000454"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.723577" elapsed="0.000763"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.723135" elapsed="0.001234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.725006" 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-04-13T02:58:27.724566" elapsed="0.000467"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.725319" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.725102" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.725856" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.725543" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.725400" elapsed="0.000516"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.725084" elapsed="0.000854"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.726073" elapsed="0.000342"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:27.726863" 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-04-13T02:58:27.726564" elapsed="0.000325"/>
</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-04-13T02:58:27.727028" elapsed="0.002360"/>
</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-04-13T02:58:27.714486" elapsed="0.015040"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:27.729744" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-13T02:58:27.729614" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.729593" elapsed="0.000239"/>
</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-04-13T02:58:27.729965" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:27.730036" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:27.732259" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:27.693892" elapsed="0.038395"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:27.732339" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.732491" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:27.692100" elapsed="0.040417"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.732969" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.732678" elapsed="0.000318"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.733919" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:27.733512" elapsed="0.000436"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:27.733996" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:27.734152" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:27.733194" elapsed="0.000984"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.734570" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.734320" elapsed="0.000296"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.738277" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.734772" elapsed="0.003533"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:27.755478" elapsed="0.000509"/>
</kw>
<msg time="2026-04-13T02:58:27.756039" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.755129" elapsed="0.000961"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.754752" elapsed="0.001414"/>
</kw>
<msg time="2026-04-13T02:58:27.756208" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.746490" elapsed="0.009763"/>
</kw>
<msg time="2026-04-13T02:58:27.756354" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.746183" elapsed="0.010195"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.756749" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.756521" elapsed="0.000254"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:27.756822" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.757062" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:27.757115" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:27.687667" elapsed="0.069473"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.757537" level="INFO">37</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.757290" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:27.757808" elapsed="0.000016"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:27.757665" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.757646" elapsed="0.000226"/>
</if>
<var name="${i}">37</var>
<status status="PASS" start="2026-04-13T02:58:27.687440" elapsed="0.070456"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:27.764035" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.763736" elapsed="0.000326"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:27.764108" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:27.764255" 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-04-13T02:58:27.763366" elapsed="0.000913"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.770561" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.770315" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.771003" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.770760" elapsed="0.000286"/>
</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-04-13T02:58:27.784159" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:27.784516" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:27.784819" 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-04-13T02:58:27.773085" elapsed="0.011777"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.771114" elapsed="0.014010"/>
</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-04-13T02:58:27.785594" elapsed="0.000168"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.785168" elapsed="0.000764"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.771095" elapsed="0.014945"/>
</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-04-13T02:58:27.793858" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.788887" elapsed="0.005267"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.788575" elapsed="0.005631"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.788547" elapsed="0.005839"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.799204" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.795383" elapsed="0.003868"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.794550" elapsed="0.004736"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.794523" elapsed="0.004788"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.799906" 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-04-13T02:58:27.799472" elapsed="0.000461"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.800223" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.800004" elapsed="0.000278"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.800942" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.800452" elapsed="0.000518"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.800306" elapsed="0.000701"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.799986" elapsed="0.001043"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.802171" 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-04-13T02:58:27.801334" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.802554" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.802333" elapsed="0.000278"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.803092" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.802796" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.802652" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.802313" elapsed="0.000862"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.803315" elapsed="0.000389"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:27.804155" 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-04-13T02:58:27.803859" elapsed="0.000321"/>
</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-04-13T02:58:27.804319" elapsed="0.003168"/>
</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-04-13T02:58:27.787274" elapsed="0.020280"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:27.807768" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-13T02:58:27.807639" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.807607" 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-04-13T02:58:27.808002" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:27.808073" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:27.810317" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:27.764591" elapsed="0.045755"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:27.810400" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.810553" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:27.762730" elapsed="0.047848"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.811036" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.810739" elapsed="0.000324"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.812148" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:27.811743" elapsed="0.000433"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:27.812226" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.812381" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:27.811319" elapsed="0.001088"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.812825" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.812552" elapsed="0.000318"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.817111" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.813007" elapsed="0.004132"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:27.834617" elapsed="0.000527"/>
</kw>
<msg time="2026-04-13T02:58:27.835246" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.834150" elapsed="0.001156"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.833663" elapsed="0.001738"/>
</kw>
<msg time="2026-04-13T02:58:27.835446" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.825335" elapsed="0.010156"/>
</kw>
<msg time="2026-04-13T02:58:27.835595" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.825025" elapsed="0.010594"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.836016" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.835812" elapsed="0.000230"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:27.836089" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.836279" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:27.836330" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:27.758227" elapsed="0.078127"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.836767" level="INFO">38</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.836502" elapsed="0.000309"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:27.837020" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:27.836877" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.836859" elapsed="0.000229"/>
</if>
<var name="${i}">38</var>
<status status="PASS" start="2026-04-13T02:58:27.758037" elapsed="0.079074"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:27.843014" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.842711" elapsed="0.000330"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:27.843087" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:27.843234" 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-04-13T02:58:27.842370" elapsed="0.000889"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.849681" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.849416" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.850108" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.849864" 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-04-13T02:58:27.862477" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:27.862695" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:27.862847" 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-04-13T02:58:27.852179" elapsed="0.010703"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.850219" elapsed="0.012727"/>
</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-04-13T02:58:27.863192" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.862983" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.850200" elapsed="0.013111"/>
</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-04-13T02:58:27.870115" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.864935" elapsed="0.005288"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.864532" elapsed="0.005766"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.864506" elapsed="0.005947"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.876191" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.871094" elapsed="0.005200"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.870589" elapsed="0.005783"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.870551" elapsed="0.005876"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.877246" 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-04-13T02:58:27.876812" elapsed="0.000461"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.877561" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.877342" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.878115" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.877806" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.877658" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.877324" elapsed="0.000873"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.878716" 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-04-13T02:58:27.878340" elapsed="0.000402"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.879026" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.878813" elapsed="0.000269"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.879537" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.879245" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.879106" elapsed="0.000492"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.878795" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.879805" elapsed="0.000347"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:27.880599" 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-04-13T02:58:27.880303" elapsed="0.000322"/>
</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-04-13T02:58:27.880781" elapsed="0.002352"/>
</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-04-13T02:58:27.863911" elapsed="0.019286"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:27.883379" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-13T02:58:27.883269" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.883250" elapsed="0.000220"/>
</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-04-13T02:58:27.883604" elapsed="0.000035"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:27.883690" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:58:27.885927" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:27.843576" elapsed="0.042382"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:27.886010" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:27.886165" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:27.841847" elapsed="0.044344"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.886724" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.886372" elapsed="0.000380"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.887691" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:27.887280" elapsed="0.000464"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:27.887793" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:27.887992" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:27.886959" elapsed="0.001059"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.888414" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.888161" elapsed="0.000299"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.892113" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.888597" elapsed="0.003543"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:27.909278" elapsed="0.000509"/>
</kw>
<msg time="2026-04-13T02:58:27.909840" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.908918" elapsed="0.000976"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.908527" elapsed="0.001441"/>
</kw>
<msg time="2026-04-13T02:58:27.910011" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.900364" elapsed="0.009691"/>
</kw>
<msg time="2026-04-13T02:58:27.910156" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.900056" elapsed="0.010124"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.910522" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.910322" elapsed="0.000225"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:27.910592" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.910799" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:27.910850" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:27.837451" elapsed="0.073423"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.911263" level="INFO">39</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.911023" elapsed="0.000283"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:27.911512" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:27.911371" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.911353" elapsed="0.000224"/>
</if>
<var name="${i}">39</var>
<status status="PASS" start="2026-04-13T02:58:27.837262" elapsed="0.074339"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:27.917544" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.917246" elapsed="0.000324"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:27.917615" elapsed="0.000044"/>
</return>
<msg time="2026-04-13T02:58:27.917783" 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-04-13T02:58:27.916917" elapsed="0.000890"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.924118" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.923871" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.924545" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.924302" elapsed="0.000285"/>
</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-04-13T02:58:27.938026" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:27.938151" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:27.938289" 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-04-13T02:58:27.926583" elapsed="0.011732"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.924671" elapsed="0.013687"/>
</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-04-13T02:58:27.938521" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.938383" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.924650" elapsed="0.013955"/>
</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-04-13T02:58:27.946383" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.940708" elapsed="0.005784"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.940222" elapsed="0.006344"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.940178" elapsed="0.006442"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.950337" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.947248" elapsed="0.003135"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.946782" elapsed="0.003635"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.946745" elapsed="0.003696"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.950996" 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-04-13T02:58:27.950590" elapsed="0.000433"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.951309" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.951093" elapsed="0.000273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.951875" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.951532" elapsed="0.000369"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.951390" elapsed="0.000548"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.951074" elapsed="0.000885"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.952459" 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-04-13T02:58:27.952099" elapsed="0.000387"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:27.952786" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:27.952555" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.953299" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.953009" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:27.952870" elapsed="0.000490"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.952538" elapsed="0.000843"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.953517" elapsed="0.000359"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:27.954302" 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-04-13T02:58:27.954024" elapsed="0.000303"/>
</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-04-13T02:58:27.954464" elapsed="0.002413"/>
</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-04-13T02:58:27.939223" elapsed="0.017718"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:27.957118" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-13T02:58:27.957011" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.956993" 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-04-13T02:58:27.957335" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:27.957405" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:27.959581" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:27.918121" elapsed="0.041487"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:27.959675" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.959895" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:27.916379" elapsed="0.043543"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.960357" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.960067" elapsed="0.000317"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.961307" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:27.960916" elapsed="0.000419"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:27.961383" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:27.961539" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:27.960581" elapsed="0.000984"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.961979" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.961722" elapsed="0.000303"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.965719" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.962160" elapsed="0.003587"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:27.982707" elapsed="0.000474"/>
</kw>
<msg time="2026-04-13T02:58:27.983232" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.982351" elapsed="0.000934"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.981982" elapsed="0.001377"/>
</kw>
<msg time="2026-04-13T02:58:27.983402" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:27.973923" elapsed="0.009522"/>
</kw>
<msg time="2026-04-13T02:58:27.983545" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:27.973606" elapsed="0.009963"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:27.983955" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:27.983733" elapsed="0.000248"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:27.984028" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:27.984239" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:27.984310" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:27.911992" elapsed="0.072349"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:27.984873" level="INFO">40</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:27.984534" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:27.985195" elapsed="0.000022"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:27.985017" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:27.984993" elapsed="0.000289"/>
</if>
<var name="${i}">40</var>
<status status="PASS" start="2026-04-13T02:58:27.911800" elapsed="0.073514"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:27.993659" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:27.993168" elapsed="0.000535"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:27.993774" elapsed="0.000050"/>
</return>
<msg time="2026-04-13T02:58:27.994012" 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-04-13T02:58:27.992665" elapsed="0.001387"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.008969" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.008369" elapsed="0.000663"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.009521" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.009187" 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-04-13T02:58:28.023124" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:28.023317" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:28.023459" 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-04-13T02:58:28.011722" elapsed="0.011773"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.009717" elapsed="0.013839"/>
</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-04-13T02:58:28.023871" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.023595" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.009645" elapsed="0.014500"/>
</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-04-13T02:58:28.031685" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.026131" elapsed="0.005736"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.025621" elapsed="0.006336"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.025577" elapsed="0.006441"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.035053" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.032706" elapsed="0.002397"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.032157" elapsed="0.002981"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.032115" elapsed="0.003048"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.035814" 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-04-13T02:58:28.035337" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.036149" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.035924" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.036712" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.036391" elapsed="0.000348"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.036237" elapsed="0.000538"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.035905" elapsed="0.000894"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.037321" 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-04-13T02:58:28.036944" elapsed="0.000404"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.037665" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.037423" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.038183" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.037890" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.037748" elapsed="0.000496"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.037404" elapsed="0.000862"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.038409" elapsed="0.000378"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:28.039237" 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-04-13T02:58:28.038939" elapsed="0.000324"/>
</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-04-13T02:58:28.039404" elapsed="0.002541"/>
</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-04-13T02:58:28.024690" elapsed="0.017406"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:28.042299" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-13T02:58:28.042183" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.042161" 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-04-13T02:58:28.042558" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:28.042650" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T02:58:28.044931" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:27.994653" elapsed="0.050307"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:28.045013" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.045167" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:27.991873" elapsed="0.053328"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.045689" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.045355" elapsed="0.000362"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.046750" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:28.046302" elapsed="0.000481"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:28.046833" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:28.046993" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:28.045946" elapsed="0.001073"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.047434" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.047168" elapsed="0.000313"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.051553" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.047621" elapsed="0.003961"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:28.068756" elapsed="0.000510"/>
</kw>
<msg time="2026-04-13T02:58:28.069325" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.068379" elapsed="0.001007"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.067993" elapsed="0.001468"/>
</kw>
<msg time="2026-04-13T02:58:28.069504" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.059863" elapsed="0.009686"/>
</kw>
<msg time="2026-04-13T02:58:28.069677" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.059520" elapsed="0.010183"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.070058" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.069851" elapsed="0.000232"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:28.070133" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:28.070395" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:28.070449" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:27.985786" elapsed="0.084688"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.070892" level="INFO">41</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.070643" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:28.071160" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:28.071013" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.070992" elapsed="0.000234"/>
</if>
<var name="${i}">41</var>
<status status="PASS" start="2026-04-13T02:58:27.985499" elapsed="0.085751"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:28.077190" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.076887" elapsed="0.000330"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:28.077264" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:28.077412" 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-04-13T02:58:28.076542" elapsed="0.000895"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.083762" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.083499" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.084199" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.083958" elapsed="0.000283"/>
</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-04-13T02:58:28.098352" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:28.098492" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:28.098588" 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-04-13T02:58:28.086251" elapsed="0.012362"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.084307" elapsed="0.014392"/>
</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-04-13T02:58:28.098988" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.098726" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.084289" elapsed="0.014888"/>
</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-04-13T02:58:28.106725" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.101532" elapsed="0.005302"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.101072" elapsed="0.005837"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.101028" elapsed="0.005935"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.110521" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.107546" elapsed="0.003021"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.107087" elapsed="0.003517"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.107050" elapsed="0.003599"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.111196" 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-04-13T02:58:28.110809" elapsed="0.000413"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.111507" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.111291" elapsed="0.000273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.112068" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.111747" elapsed="0.000348"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.111588" elapsed="0.000551"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.111273" elapsed="0.000889"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.112695" 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-04-13T02:58:28.112312" elapsed="0.000410"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.113048" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.112831" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.113560" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.113269" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.113129" elapsed="0.000492"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.112812" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.113794" elapsed="0.000342"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:28.114576" 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-04-13T02:58:28.114286" elapsed="0.000315"/>
</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-04-13T02:58:28.114758" elapsed="0.003457"/>
</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-04-13T02:58:28.099995" elapsed="0.018284"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:28.118455" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-13T02:58:28.118349" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.118331" elapsed="0.000218"/>
</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-04-13T02:58:28.118722" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:28.118798" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:28.121035" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:28.077774" elapsed="0.043290"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:28.121117" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.121269" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:28.076020" elapsed="0.045275"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.121757" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.121439" elapsed="0.000346"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.122738" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:28.122323" elapsed="0.000443"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:28.122815" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.122973" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:28.122000" elapsed="0.000999"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.123393" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.123142" elapsed="0.000296"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.127209" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.123583" elapsed="0.003654"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:28.144547" elapsed="0.000501"/>
</kw>
<msg time="2026-04-13T02:58:28.145140" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.144199" elapsed="0.000997"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.143787" elapsed="0.001484"/>
</kw>
<msg time="2026-04-13T02:58:28.145315" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.135539" elapsed="0.009820"/>
</kw>
<msg time="2026-04-13T02:58:28.145460" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.135223" elapsed="0.010261"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.145858" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.145651" elapsed="0.000233"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:28.145931" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:28.146133" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:28.146194" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:28.071590" elapsed="0.074629"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.146615" level="INFO">42</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.146368" elapsed="0.000309"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:28.146888" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:28.146746" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.146728" elapsed="0.000226"/>
</if>
<var name="${i}">42</var>
<status status="PASS" start="2026-04-13T02:58:28.071395" elapsed="0.075582"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:28.153000" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.152699" elapsed="0.000327"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:28.153073" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.153220" 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-04-13T02:58:28.152344" elapsed="0.000900"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.159693" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.159428" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.160170" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.159921" 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-04-13T02:58:28.173522" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:28.173771" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:28.173933" 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-04-13T02:58:28.162254" elapsed="0.011727"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.160281" elapsed="0.013782"/>
</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-04-13T02:58:28.174324" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.174111" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.160263" elapsed="0.014191"/>
</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-04-13T02:58:28.180370" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.176854" elapsed="0.003584"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.176420" elapsed="0.004065"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.176375" elapsed="0.004212"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.184091" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.180993" elapsed="0.003167"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.180694" elapsed="0.003529"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.180668" elapsed="0.003596"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.185017" 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-04-13T02:58:28.184517" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.185338" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.185115" elapsed="0.000281"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.185887" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.185566" elapsed="0.000348"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.185420" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.185097" elapsed="0.000874"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.186474" 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-04-13T02:58:28.186113" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.186803" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.186571" elapsed="0.000289"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.187318" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.187026" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.186884" elapsed="0.000495"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.186553" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.187538" elapsed="0.000375"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:28.188388" 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-04-13T02:58:28.188065" 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-04-13T02:58:28.188575" elapsed="0.002631"/>
</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-04-13T02:58:28.174966" elapsed="0.016307"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:28.191467" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T02:58:28.191350" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.191328" elapsed="0.000233"/>
</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-04-13T02:58:28.191712" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:28.191788" elapsed="0.000018"/>
</return>
<msg time="2026-04-13T02:58:28.194069" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:28.153552" elapsed="0.040546"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:28.194153" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:28.194325" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:28.151776" elapsed="0.042575"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.194811" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.194497" elapsed="0.000341"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.195773" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:28.195364" elapsed="0.000442"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:28.195854" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T02:58:28.196075" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:28.195041" elapsed="0.001060"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.196507" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.196247" elapsed="0.000307"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.200268" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.196708" elapsed="0.003587"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:28.217522" elapsed="0.000498"/>
</kw>
<msg time="2026-04-13T02:58:28.218073" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.217175" elapsed="0.000953"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.216803" elapsed="0.001400"/>
</kw>
<msg time="2026-04-13T02:58:28.218247" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.208724" elapsed="0.009567"/>
</kw>
<msg time="2026-04-13T02:58:28.218393" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.208392" elapsed="0.010025"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.218789" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.218561" elapsed="0.000253"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:28.218861" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.219049" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:28.219100" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:28.147304" elapsed="0.071820"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.219517" level="INFO">43</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.219275" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:28.219785" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:28.219640" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.219607" elapsed="0.000244"/>
</if>
<var name="${i}">43</var>
<status status="PASS" start="2026-04-13T02:58:28.147116" elapsed="0.072760"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:28.225993" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.225692" elapsed="0.000328"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:28.226066" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.226215" 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-04-13T02:58:28.225347" elapsed="0.000893"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.232528" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.232278" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.232976" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.232727" 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-04-13T02:58:28.246807" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:28.246928" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:28.247067" 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-04-13T02:58:28.235015" elapsed="0.012078"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.233087" elapsed="0.014048"/>
</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-04-13T02:58:28.247300" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.247161" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.233068" 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-04-13T02:58:28.250654" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.248386" elapsed="0.002317"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.248181" elapsed="0.002557"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.248161" elapsed="0.002602"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.253209" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.251028" elapsed="0.002228"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.250820" elapsed="0.002470"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.250803" elapsed="0.002512"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.253851" 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-04-13T02:58:28.253460" elapsed="0.000419"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.254165" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.253949" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.254709" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.254389" elapsed="0.000347"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.254246" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.253931" elapsed="0.000864"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.255301" 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-04-13T02:58:28.254938" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.255613" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.255398" elapsed="0.000288"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.256178" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.255853" elapsed="0.000352"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.255710" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.255380" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.256397" elapsed="0.000356"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:28.257180" 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-04-13T02:58:28.256902" elapsed="0.000303"/>
</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-04-13T02:58:28.257342" elapsed="0.002334"/>
</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-04-13T02:58:28.247744" elapsed="0.011997"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:28.259930" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-13T02:58:28.259811" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.259792" elapsed="0.000222"/>
</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-04-13T02:58:28.260146" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:28.260215" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:28.262403" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:28.226555" elapsed="0.035876"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:28.262483" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.262688" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:28.224810" elapsed="0.037905"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.263151" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.262861" elapsed="0.000317"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.264141" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:28.263707" elapsed="0.000462"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:28.264218" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:28.264376" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:28.263375" elapsed="0.001027"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.264817" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.264545" elapsed="0.000318"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.268507" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.265000" elapsed="0.003534"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:28.285576" elapsed="0.000500"/>
</kw>
<msg time="2026-04-13T02:58:28.286128" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.285231" elapsed="0.000952"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.284860" elapsed="0.001398"/>
</kw>
<msg time="2026-04-13T02:58:28.286301" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.276763" elapsed="0.009582"/>
</kw>
<msg time="2026-04-13T02:58:28.286448" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.276430" elapsed="0.010042"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.286848" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.286614" elapsed="0.000260"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:28.286922" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:28.287112" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:28.287164" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:28.220228" elapsed="0.066961"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.287587" level="INFO">44</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.287343" elapsed="0.000304"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:28.287863" elapsed="0.000016"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:28.287716" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.287698" elapsed="0.000241"/>
</if>
<var name="${i}">44</var>
<status status="PASS" start="2026-04-13T02:58:28.220039" elapsed="0.067924"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:28.294000" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.293697" elapsed="0.000329"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:28.294073" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.294220" 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-04-13T02:58:28.293354" elapsed="0.000891"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.300747" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.300477" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.301188" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.300941" 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-04-13T02:58:28.314025" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:28.314191" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:28.314320" 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-04-13T02:58:28.303338" elapsed="0.011017"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.301301" elapsed="0.013112"/>
</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-04-13T02:58:28.314662" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.314448" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.301282" elapsed="0.013499"/>
</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-04-13T02:58:28.320974" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.316193" elapsed="0.004889"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.315857" elapsed="0.005301"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.315830" elapsed="0.005383"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.325714" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.321830" elapsed="0.003930"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.321338" elapsed="0.004456"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.321301" elapsed="0.004517"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.326339" 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-04-13T02:58:28.325966" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.326663" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.326434" elapsed="0.000287"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.327183" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.326887" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.326745" elapsed="0.000500"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.326416" elapsed="0.000849"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.327776" 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-04-13T02:58:28.327404" elapsed="0.000403"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.328115" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.327876" elapsed="0.000297"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.328649" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.328337" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.328197" elapsed="0.000514"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.327858" elapsed="0.000874"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.328866" elapsed="0.000338"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:28.329644" 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-04-13T02:58:28.329350" elapsed="0.000321"/>
</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-04-13T02:58:28.329808" elapsed="0.002362"/>
</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-04-13T02:58:28.315252" elapsed="0.017019"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:28.332448" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-13T02:58:28.332342" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.332323" 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-04-13T02:58:28.332679" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:28.332750" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:28.334939" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:28.294607" elapsed="0.040359"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:28.335017" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:28.335166" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:28.292833" elapsed="0.042358"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.335620" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.335335" elapsed="0.000328"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.336589" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:28.336201" elapsed="0.000416"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:28.336681" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.336839" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:28.335859" elapsed="0.001005"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.337253" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.337003" elapsed="0.000295"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.340949" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.337434" elapsed="0.003542"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:28.358106" elapsed="0.000477"/>
</kw>
<msg time="2026-04-13T02:58:28.358657" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.357754" elapsed="0.000956"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.357359" elapsed="0.001427"/>
</kw>
<msg time="2026-04-13T02:58:28.358830" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.349225" elapsed="0.009650"/>
</kw>
<msg time="2026-04-13T02:58:28.358977" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.348920" elapsed="0.010082"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.359356" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.359145" elapsed="0.000236"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:28.359428" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.359672" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:28.359726" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:28.288291" elapsed="0.071460"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.360183" level="INFO">45</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.359907" elapsed="0.000320"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:28.360432" elapsed="0.000016"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:28.360294" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.360276" elapsed="0.000219"/>
</if>
<var name="${i}">45</var>
<status status="PASS" start="2026-04-13T02:58:28.288102" elapsed="0.072417"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:28.366425" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.366130" elapsed="0.000322"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:28.366497" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:28.366660" 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-04-13T02:58:28.365799" elapsed="0.000887"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.372958" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.372708" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.373393" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.373144" 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-04-13T02:58:28.386079" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:28.386198" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:28.386291" 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-04-13T02:58:28.375435" elapsed="0.010882"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.373504" elapsed="0.012855"/>
</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-04-13T02:58:28.386522" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.386385" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.373485" elapsed="0.013121"/>
</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-04-13T02:58:28.393846" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.388724" elapsed="0.005229"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.388218" elapsed="0.005810"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.388174" elapsed="0.005908"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.398026" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.394691" elapsed="0.003380"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.394205" elapsed="0.003900"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.394169" elapsed="0.003960"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.398665" 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-04-13T02:58:28.398275" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.398977" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.398762" elapsed="0.000270"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.399488" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.399195" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.399056" elapsed="0.000492"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.398744" elapsed="0.000825"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.400105" 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-04-13T02:58:28.399724" elapsed="0.000407"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.400449" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.400235" elapsed="0.000270"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.400978" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.400684" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.400529" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.400217" elapsed="0.000842"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.401191" elapsed="0.000341"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:28.401973" 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-04-13T02:58:28.401695" elapsed="0.000304"/>
</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-04-13T02:58:28.402135" elapsed="0.002351"/>
</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-04-13T02:58:28.387186" elapsed="0.017362"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:28.404739" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-13T02:58:28.404618" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.404599" elapsed="0.000225"/>
</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-04-13T02:58:28.404955" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:28.405025" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:28.407217" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:28.367003" elapsed="0.040242"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:28.407297" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:28.407447" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:28.365254" elapsed="0.042219"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.407918" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.407615" elapsed="0.000329"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.408894" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:28.408485" elapsed="0.000436"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:28.408969" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:28.409124" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:28.408169" elapsed="0.000980"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.409544" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.409295" elapsed="0.000294"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.413266" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.409739" elapsed="0.003555"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:28.430322" elapsed="0.000487"/>
</kw>
<msg time="2026-04-13T02:58:28.430896" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.429980" elapsed="0.000969"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.429594" elapsed="0.001431"/>
</kw>
<msg time="2026-04-13T02:58:28.431068" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.421498" elapsed="0.009614"/>
</kw>
<msg time="2026-04-13T02:58:28.431214" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.421193" elapsed="0.010045"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.431580" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.431379" elapsed="0.000226"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:28.431668" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:28.431855" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:28.431906" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:28.360858" elapsed="0.071072"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.432343" level="INFO">46</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.432098" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:28.432589" elapsed="0.000016"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:28.432452" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.432434" elapsed="0.000236"/>
</if>
<var name="${i}">46</var>
<status status="PASS" start="2026-04-13T02:58:28.360669" elapsed="0.072024"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:28.438823" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.438508" elapsed="0.000342"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:28.438896" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.439044" 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-04-13T02:58:28.438175" elapsed="0.000893"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.445810" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.445538" elapsed="0.000319"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.446240" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.445995" 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-04-13T02:58:28.462791" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:28.463207" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:28.463566" 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-04-13T02:58:28.448338" elapsed="0.015328"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.446352" elapsed="0.017453"/>
</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-04-13T02:58:28.464386" elapsed="0.000061"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.463887" elapsed="0.000664"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.446334" elapsed="0.018279"/>
</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-04-13T02:58:28.471533" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.467447" elapsed="0.004169"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.466824" elapsed="0.004867"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.466759" elapsed="0.005084"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.475440" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.472291" elapsed="0.003217"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.471942" elapsed="0.003618"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.471913" elapsed="0.003682"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.476558" 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-04-13T02:58:28.475864" elapsed="0.000734"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.477067" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.476801" elapsed="0.000341"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.477708" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.477369" elapsed="0.000367"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.477175" elapsed="0.000599"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.476773" elapsed="0.001023"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.478342" 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-04-13T02:58:28.477949" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.478741" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.478442" elapsed="0.000374"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.479336" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.478990" elapsed="0.000381"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.478841" elapsed="0.000578"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.478424" elapsed="0.001018"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.479597" elapsed="0.000470"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:28.480627" 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-04-13T02:58:28.480253" elapsed="0.000425"/>
</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-04-13T02:58:28.480868" elapsed="0.002848"/>
</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-04-13T02:58:28.465603" elapsed="0.018192"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:28.484058" elapsed="0.000043"/>
</return>
<status status="PASS" start="2026-04-13T02:58:28.483888" elapsed="0.000255"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.483861" elapsed="0.000310"/>
</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-04-13T02:58:28.484453" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:28.484599" elapsed="0.000019"/>
</return>
<msg time="2026-04-13T02:58:28.487345" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:28.439412" elapsed="0.047964"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:28.487447" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:28.487660" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:28.437620" elapsed="0.050071"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.488224" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.487849" elapsed="0.000412"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.489325" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:28.488908" elapsed="0.000446"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:28.489402" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:28.489612" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:28.488528" elapsed="0.001127"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.490063" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.489804" elapsed="0.000307"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.493897" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.490252" elapsed="0.003673"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:28.511407" elapsed="0.000522"/>
</kw>
<msg time="2026-04-13T02:58:28.511985" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.511040" elapsed="0.001033"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.510651" elapsed="0.001511"/>
</kw>
<msg time="2026-04-13T02:58:28.512210" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.502347" elapsed="0.009912"/>
</kw>
<msg time="2026-04-13T02:58:28.512377" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.502027" elapsed="0.010381"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.512864" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.512562" elapsed="0.000331"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:28.512945" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:28.513151" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:28.513204" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:28.433019" elapsed="0.080209"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.513663" level="INFO">47</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.513389" elapsed="0.000327"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:28.513945" elapsed="0.000020"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:28.513790" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.513771" elapsed="0.000244"/>
</if>
<var name="${i}">47</var>
<status status="PASS" start="2026-04-13T02:58:28.432834" elapsed="0.081208"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:28.520098" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.519773" elapsed="0.000354"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:28.520174" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:28.520326" 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-04-13T02:58:28.519425" elapsed="0.000926"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.526667" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.526400" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.527101" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.526854" 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-04-13T02:58:28.540351" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:28.540499" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:28.540698" 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-04-13T02:58:28.529219" elapsed="0.011507"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.527213" elapsed="0.013560"/>
</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-04-13T02:58:28.541221" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.540803" elapsed="0.000616"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.527194" elapsed="0.014285"/>
</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-04-13T02:58:28.549278" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.544335" elapsed="0.004993"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.543792" elapsed="0.005571"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.543743" elapsed="0.005644"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.551806" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.549665" elapsed="0.002186"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.549444" elapsed="0.002441"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.549427" elapsed="0.002482"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.552480" 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-04-13T02:58:28.552081" elapsed="0.000425"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.552814" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.552576" elapsed="0.000297"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.553363" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.553061" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.552906" elapsed="0.000521"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.552558" elapsed="0.000890"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.553978" 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-04-13T02:58:28.553588" elapsed="0.000417"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.554290" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.554075" elapsed="0.000271"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.554820" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.554510" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.554370" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.554057" elapsed="0.000844"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.555042" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:28.555880" 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-04-13T02:58:28.555537" 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-04-13T02:58:28.556103" elapsed="0.003557"/>
</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-04-13T02:58:28.542549" elapsed="0.017181"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:28.559920" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T02:58:28.559806" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.559784" elapsed="0.000229"/>
</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-04-13T02:58:28.560167" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:28.560239" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:28.562460" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:28.520691" elapsed="0.041798"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:28.562540" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.562763" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:28.518895" elapsed="0.043895"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.563244" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.562938" elapsed="0.000333"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.564254" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:28.563834" elapsed="0.000448"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:28.564330" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.564487" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:28.563482" elapsed="0.001030"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.564926" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.564669" elapsed="0.000304"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.568615" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.565108" elapsed="0.003549"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:28.585978" elapsed="0.000502"/>
</kw>
<msg time="2026-04-13T02:58:28.586535" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.585618" elapsed="0.000973"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.585245" elapsed="0.001448"/>
</kw>
<msg time="2026-04-13T02:58:28.586739" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.577110" elapsed="0.009681"/>
</kw>
<msg time="2026-04-13T02:58:28.586919" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.576758" elapsed="0.010191"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.587302" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.587096" elapsed="0.000232"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:28.587376" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:28.587567" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:28.587619" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:28.514409" elapsed="0.073252"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.588055" level="INFO">48</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.587812" elapsed="0.000302"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:28.588332" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:28.588187" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.588167" elapsed="0.000233"/>
</if>
<var name="${i}">48</var>
<status status="PASS" start="2026-04-13T02:58:28.514209" elapsed="0.074215"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:28.594451" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.594137" elapsed="0.000342"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:28.594528" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:28.594700" 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-04-13T02:58:28.593797" elapsed="0.000928"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.601153" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.600896" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.601577" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.601336" elapsed="0.000283"/>
</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-04-13T02:58:28.614863" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0idwryi82ub9p1u1tq56n0oorf0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:28.615055" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:28.615192" 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-04-13T02:58:28.603662" elapsed="0.011566"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.601709" elapsed="0.013579"/>
</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-04-13T02:58:28.615526" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.615326" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.601687" elapsed="0.013980"/>
</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-04-13T02:58:28.622507" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.617334" elapsed="0.005281"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.616865" elapsed="0.005859"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.616822" elapsed="0.005960"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.626461" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.623372" elapsed="0.003135"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.622908" elapsed="0.003633"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.622871" elapsed="0.003695"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.627156" 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-04-13T02:58:28.626743" elapsed="0.000440"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.627471" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.627253" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.628015" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.627714" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.627553" elapsed="0.000523"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.627234" elapsed="0.000862"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.628655" 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-04-13T02:58:28.628257" elapsed="0.000426"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.628974" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.628753" elapsed="0.000279"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.629489" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.629197" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.629056" elapsed="0.000493"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.628735" elapsed="0.000836"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.629726" elapsed="0.000354"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:28.630532" 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-04-13T02:58:28.630230" elapsed="0.000328"/>
</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-04-13T02:58:28.630716" elapsed="0.002436"/>
</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-04-13T02:58:28.616215" elapsed="0.017054"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:28.633451" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-13T02:58:28.633341" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.633322" 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-04-13T02:58:28.633693" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:28.633766" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:28.635974" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:28.595113" elapsed="0.040889"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:28.636054" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.636299" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:28.593240" elapsed="0.043087"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.636781" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.636475" elapsed="0.000333"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.637915" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:28.637493" elapsed="0.000450"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:28.637992" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.638259" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:28.637043" elapsed="0.001243"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.639000" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.638433" elapsed="0.000615"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.642808" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.639188" elapsed="0.003648"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:28.660507" elapsed="0.000500"/>
</kw>
<msg time="2026-04-13T02:58:28.661061" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.660149" elapsed="0.000968"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.659751" elapsed="0.001442"/>
</kw>
<msg time="2026-04-13T02:58:28.661236" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.651651" elapsed="0.009629"/>
</kw>
<msg time="2026-04-13T02:58:28.661382" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.651326" elapsed="0.010080"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.661770" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.661548" elapsed="0.000248"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:28.661842" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:28.662071" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:28.662123" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:28.588800" elapsed="0.073348"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.662541" level="INFO">49</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.662297" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:28.662828" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:28.662670" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.662650" elapsed="0.000246"/>
</if>
<var name="${i}">49</var>
<status status="PASS" start="2026-04-13T02:58:28.588574" elapsed="0.074346"/>
</iter>
<var>${i}</var>
<value>${itr}</value>
<status status="PASS" start="2026-04-13T02:58:23.975520" elapsed="4.687436"/>
</for>
<return>
<value>${sts}</value>
<value>${op}</value>
<status status="PASS" start="2026-04-13T02:58:28.663002" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:58:28.663189" level="INFO">${sts1} = connecting</msg>
<msg time="2026-04-13T02:58:28.663241" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts1}</var>
<var>${output}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Verify if a netconf endpoint status is connected by running in a loop</doc>
<status status="PASS" start="2026-04-13T02:58:23.975218" elapsed="4.688047"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.665354" level="INFO">${ep} = CONTROLLER1</msg>
<var>${ep}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.663412" elapsed="0.001968"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.669065" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.665524" elapsed="0.003570"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:28.686522" elapsed="0.000444"/>
</kw>
<msg time="2026-04-13T02:58:28.687024" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.686163" elapsed="0.000913"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return port if vanadium is at least ${lower_bound},
return netconf-node-topology:port otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.685774" elapsed="0.001377"/>
</kw>
<msg time="2026-04-13T02:58:28.687196" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.677334" elapsed="0.009904"/>
</kw>
<msg time="2026-04-13T02:58:28.687341" level="INFO">${portKey} = port</msg>
<var>${portKey}</var>
<arg>port</arg>
<arg>netconf-node-topology:port</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.677024" elapsed="0.010340"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.687732" level="INFO">${port} = 1830</msg>
<var>${port}</var>
<arg>${node}</arg>
<arg>${portKey}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.687509" elapsed="0.000249"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.688265" level="INFO">${port} = 1830</msg>
<var>${port}</var>
<arg>${port}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:58:28.687898" elapsed="0.000396"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${endpoint}</arg>
<arg>${ep}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-13T02:58:28.688439" elapsed="0.000332"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${port}</arg>
<arg>${NETCONF_PORT}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-13T02:58:28.688913" elapsed="0.000304"/>
</kw>
<arg>${NETCONF_EP_NAME}</arg>
<arg>${THIRD_CONTROLLER_INDEX}</arg>
<doc>Verify if a netconf endpoint is mounted</doc>
<status status="PASS" start="2026-04-13T02:58:23.974715" elapsed="4.714564"/>
</kw>
<doc>schedule a basic export/backup on a cluster node, with controller mounting itself as a netconf device.Verifies if the export is limited to a local node.</doc>
<tag>create backup</tag>
<status status="PASS" start="2026-04-13T02:58:08.872516" elapsed="19.816917"/>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-13T02:58:28.690208" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-13T02:58:28.690126" elapsed="0.000444"/>
</kw>
<doc>Test suite for verifying basic export only on a local node with a netconf mount on a cluster</doc>
<status status="PASS" start="2026-04-13T02:58:08.766726" elapsed="19.923881"/>
</suite>
<suite id="s1-s3" name="120-Cluster-Export-Basic" source="/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/suites/daexim/120-cluster-export-basic.robot">
<kw name="ClusterManagement_Setup" owner="ClusterManagement" type="SETUP">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.766995" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-13T02:58:28.763309" elapsed="0.003720"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-13T02:58:28.767257" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:28.767129" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.767103" elapsed="0.000226"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.767914" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:58:28.767564" elapsed="0.000394"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.768436" 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-04-13T02:58:28.768106" elapsed="0.000356"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:28.768960" elapsed="0.000293"/>
</kw>
<msg time="2026-04-13T02:58:28.769350" level="INFO">${status} = PASS</msg>
<msg time="2026-04-13T02:58:28.769396" 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 error.</doc>
<status status="PASS" start="2026-04-13T02:58:28.768614" elapsed="0.000804"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.769963" 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-04-13T02:58:28.769573" elapsed="0.000416"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.770976" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:58:28.770698" elapsed="0.000305"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.771391" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:58:28.771136" elapsed="0.000280"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.771879" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.771559" elapsed="0.000347"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.775044" elapsed="0.000210"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.775746" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.775398" elapsed="0.000374"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.775911" elapsed="0.000420"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.777105" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.776806" elapsed="0.000324"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:28.777177" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T02:58:28.777340" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-13T02:58:28.776512" elapsed="0.000853"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:28.777997" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.156:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7fe77219f010&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-13T02:58:28.777506" elapsed="0.000638"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.778290" elapsed="0.000188"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-13T02:58:28.774479" elapsed="0.004058"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-13T02:58:28.774300" elapsed="0.004280"/>
</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-04-13T02:58:28.779385" elapsed="0.000185"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.780054" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.779726" elapsed="0.000353"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.780236" elapsed="0.000266"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.781494" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.781016" elapsed="0.000504"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:28.781566" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:28.781734" 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-04-13T02:58:28.780693" elapsed="0.001066"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:28.782309" level="INFO">Creating Session using : alias=ClusterManagement__session_2, url=http://10.30.170.138:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7fe77220bd50&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-13T02:58:28.781898" elapsed="0.000559"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.782617" elapsed="0.000206"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-13T02:58:28.778850" elapsed="0.004033"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-13T02:58:28.778682" elapsed="0.004244"/>
</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-04-13T02:58:28.783723" elapsed="0.000189"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.784392" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.784053" elapsed="0.000365"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.784600" elapsed="0.000244"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.785581" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.785291" elapsed="0.000316"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:28.785667" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:28.785819" 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-04-13T02:58:28.785018" elapsed="0.000827"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:28.786383" level="INFO">Creating Session using : alias=ClusterManagement__session_3, url=http://10.30.171.185:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7fe77083f490&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-13T02:58:28.785981" elapsed="0.000505"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.786647" elapsed="0.000188"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-13T02:58:28.783175" elapsed="0.003718"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-13T02:58:28.783009" elapsed="0.003927"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-04-13T02:58:28.771971" elapsed="0.014994"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.787471" level="INFO">${ClusterManagement__member_index_list} = [1, 2, 3]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:58:28.787117" elapsed="0.000395"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.788022" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.156', 2: '10.30.170.138', 3: '10.30.171.185'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:58:28.787673" elapsed="0.000390"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.788571" 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 a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:58:28.788234" elapsed="0.000379"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.770235" elapsed="0.018452"/>
</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-04-13T02:58:28.762944" elapsed="0.025800"/>
</kw>
<test id="s1-s3-t1" name="Create Basic Export" line="11">
<kw name="Mount Netconf Endpoint" owner="DaeximKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.790176" level="INFO">${ENDPOINT} = CONTROLLER1</msg>
<var>${ENDPOINT}</var>
<arg>${endpoint}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.789893" elapsed="0.000308"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:28.808751" elapsed="0.000500"/>
</kw>
<msg time="2026-04-13T02:58:28.809327" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.808288" elapsed="0.001104"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return ../variables/daexim/scandium/netconf_mount.json if vanadium is at least ${lower_bound},
return ../variables/daexim/calcium/netconf_mount.json otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.807741" elapsed="0.001732"/>
</kw>
<msg time="2026-04-13T02:58:28.809605" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.799207" elapsed="0.010461"/>
</kw>
<msg time="2026-04-13T02:58:28.809781" level="INFO">${dictionary} = ../variables/daexim/scandium/netconf_mount.json</msg>
<var>${dictionary}</var>
<arg>${NETCONF_PAYLOAD_JSON_SCANDIUM}</arg>
<arg>${NETCONF_PAYLOAD_JSON_CALCIUM}</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:28.798793" elapsed="0.011013"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:58:28.810119" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/scandium/netconf_mount.json"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/scandium/netconf_mount.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:28.810310" level="INFO">${json} = {
  "node": {
    "node-id": "${ENDPOINT}",
    "netconf-node": {
        "host": "127.0.0.1",
        "port": "1830",
        "tcp-only": "false",
        "keepalive-delay": "0",
        "login-passw...</msg>
<var>${json}</var>
<arg>/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/${dictionary}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:58:28.809956" elapsed="0.000382"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.810825" level="INFO">${json} = {
  "node": {
    "node-id": "CONTROLLER1",
    "netconf-node": {
        "host": "127.0.0.1",
        "port": "1830",
        "tcp-only": "false",
        "keepalive-delay": "0",
        "login-passw...</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-13T02:58:28.810479" elapsed="0.000374"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.811239" level="INFO">{
  "node": {
    "node-id": "CONTROLLER1",
    "netconf-node": {
        "host": "127.0.0.1",
        "port": "1830",
        "tcp-only": "false",
        "keepalive-delay": "0",
        "login-password-unencrypted": {
            "username": "admin",
            "password": "admin"
        }
    }
  }
}
</msg>
<arg>${json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.810997" elapsed="0.000288"/>
</kw>
<kw name="Put_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.816568" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.816271" elapsed="0.000324"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:28.816660" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:58:28.816822" 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-04-13T02:58:28.815902" elapsed="0.000944"/>
</kw>
<kw name="Put_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.822090" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.821842" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.822505" level="INFO">{
  "node": {
    "node-id": "CONTROLLER1",
    "netconf-node": {
        "host": "127.0.0.1",
        "port": "1830",
        "tcp-only": "false",
        "keepalive-delay": "0",
        "login-password-unencrypted": {
            "username": "admin",
            "password": "admin"
        }
    }
  }
}
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.822271" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.822950" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.822706" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.823358" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.823126" elapsed="0.000273"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.824244" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:58:28.823995" elapsed="0.000276"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:58:28.824580" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:58:28.824411" elapsed="0.000193"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.824759" elapsed="0.000204"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.825351" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.825106" elapsed="0.000289"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:58:28.825439" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:28.825601" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:58:28.823585" elapsed="0.002054"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:28.846432" level="INFO">PUT Request : url=http://10.30.170.156:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '307', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body={
  "node": {
    "node-id": "CONTROLLER1",
    "netconf-node": {
        "host": "127.0.0.1",
        "port": "1830",
        "tcp-only": "false",
        "keepalive-delay": "0",
        "login-password-unencrypted": {
            "username": "admin",
            "password": "admin"
        }
    }
  }
}
 
 </msg>
<msg time="2026-04-13T02:58:28.846748" level="INFO">PUT Response : url=http://10.30.170.156:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=204, reason=No Content 
 headers={'Set-Cookie': 'JSESSIONID=node015ib33ospstz84242o0unctd22.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Sun, 12-Apr-2026 02:58:28 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT'} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:28.847032" level="INFO">${response} = &lt;Response [204]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:58:28.827971" elapsed="0.019126"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.825728" elapsed="0.021498"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.847757" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.847303" elapsed="0.000624"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.825706" elapsed="0.022275"/>
</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-04-13T02:58:28.854737" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.850458" elapsed="0.004342"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.849946" elapsed="0.004904"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.849898" elapsed="0.004988"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.858323" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.855262" elapsed="0.003125"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.854966" elapsed="0.003467"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.854942" elapsed="0.003525"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.859291" 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-04-13T02:58:28.858715" elapsed="0.000614"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.859753" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.859426" elapsed="0.000407"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.860543" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.860068" elapsed="0.000512"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.859867" elapsed="0.000781"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.859400" elapsed="0.001280"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.861264" 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-04-13T02:58:28.860866" elapsed="0.000425"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.861577" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.861362" elapsed="0.000287"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.862113" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.861817" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:28.861674" elapsed="0.000501"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.861344" elapsed="0.000852"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.862339" elapsed="0.000381"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:28.863187" 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-04-13T02:58:28.862877" 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-04-13T02:58:28.863352" elapsed="0.002211"/>
</kw>
<arg>${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-04-13T02:58:28.848982" elapsed="0.016665"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:28.865837" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:28.865722" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:28.865702" elapsed="0.000208"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:58:28.868380" level="INFO">${text_normalized} = </msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:58:28.866041" elapsed="0.002367"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:58:28.868461" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T02:58:28.868660" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>PUT data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:58:28.819404" elapsed="0.049282"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:28.868834" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:28.869002" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Put_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.</doc>
<status status="PASS" start="2026-04-13T02:58:28.817043" elapsed="0.051985"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:28.869079" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:28.869232" level="INFO">${resp} = </msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${json}</arg>
<arg>${host_index}</arg>
<doc>Send a PUT with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:28.815352" elapsed="0.053905"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.869733" level="INFO"/>
<arg>${resp}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.869424" elapsed="0.000352"/>
</kw>
<arg>${NETCONF_EP_NAME}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Mount a netconf endpoint</doc>
<status status="PASS" start="2026-04-13T02:58:28.789521" elapsed="0.080313"/>
</kw>
<kw name="Cleanup Cluster Export Files" owner="DaeximKeywords">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.873042" 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-04-13T02:58:28.872556" elapsed="0.000514"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.873551" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:58:28.873219" elapsed="0.000360"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-13T02:58:28.873641" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:28.873804" 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-04-13T02:58:28.872160" elapsed="0.001669"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.874895" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:28.874568" elapsed="0.000353"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.887132" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:28.886774" elapsed="0.000389"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:28.887222" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T02:58:28.887393" 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-04-13T02:58:28.886401" elapsed="0.001018"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.890201" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.889941" elapsed="0.000307"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:28.892794" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:58:28.892282" elapsed="0.001114">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:58:28.890327" elapsed="0.003153">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.893670" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:28.893514" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-04-13T02:58:28.890303" elapsed="0.003456">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:58:28.894141" elapsed="0.000026"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:28.894220" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:58:28.887709" elapsed="0.006624">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:28.894390" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-13T02:58:28.886015" elapsed="0.008471">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:28.894675" elapsed="0.000023"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:28.894822" elapsed="0.000018"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:58:28.883723" elapsed="0.011203">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:28.875064" elapsed="0.019929"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:28.896351" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.896014" elapsed="0.000370"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:28.897229" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:28.901374" elapsed="0.000381"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.903005" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:28.901979" elapsed="0.001111"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:28.904043" level="INFO">${conn_id} = 185</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:28.903292" elapsed="0.000793"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:28.906104" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:28.906276" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:28.905551" elapsed="0.000832"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.907105" elapsed="0.000734"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:28.909604" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:29.233996" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:21 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:28.909278" elapsed="0.324883"/>
</kw>
<msg time="2026-04-13T02:58:29.234310" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.908579" elapsed="0.325846"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:28.904418" elapsed="0.330177"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:29.235332" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:29.258579" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:29.259062" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:29.259235" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:29.234946" elapsed="0.024377"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:29.260119" elapsed="0.000776"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:29.262872" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:29.261483" elapsed="0.001573"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:29.263864" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:29.263359" elapsed="0.000784"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:29.263304" elapsed="0.000900"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:29.264887" elapsed="0.000075"/>
</return>
<status status="PASS" start="2026-04-13T02:58:29.264340" elapsed="0.000873"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:29.264305" elapsed="0.000974"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:29.265361" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:29.270754" elapsed="0.000844"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:29.271885" elapsed="0.000454"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:29.272606" elapsed="0.000346"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:29.266193" elapsed="0.006855"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:28.899468" elapsed="0.373679"/>
</kw>
<msg time="2026-04-13T02:58:29.273205" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.898799" elapsed="0.374466"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:28.898011" elapsed="0.375337"/>
</kw>
<msg time="2026-04-13T02:58:29.273407" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:28.897510" elapsed="0.375968"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:29.276159" elapsed="0.000449"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:29.276869" elapsed="0.000156"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:29.277163" elapsed="0.000100"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:29.273803" elapsed="0.003526"/>
</kw>
<msg time="2026-04-13T02:58:29.277450" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:28.896590" elapsed="0.380895"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:29.278041" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:29.277755" elapsed="0.000330"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:29.278133" elapsed="0.000033"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:28.895592" elapsed="0.382674"/>
</kw>
<msg time="2026-04-13T02:58:29.278357" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:28.895141" elapsed="0.383243"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:29.279744" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:29.279415" elapsed="0.000358"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:29.280721" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:29.284948" elapsed="0.000380"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:29.286598" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:29.285533" elapsed="0.001175"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:29.287747" level="INFO">${conn_id} = 188</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:29.286916" elapsed="0.000874"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:29.291353" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:29.291540" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:29.289341" elapsed="0.002410"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:29.292501" elapsed="0.000710"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:29.295120" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:29.612905" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:29 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:29.294687" elapsed="0.318391"/>
</kw>
<msg time="2026-04-13T02:58:29.613233" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:29.293964" elapsed="0.319379"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:29.288094" elapsed="0.325411"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:29.614206" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:29.627336" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:29.627613" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:29.627723" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:29.613840" elapsed="0.013948"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:29.628373" elapsed="0.001086"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:29.631220" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:29.629944" elapsed="0.001492"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:29.632355" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:29.631819" elapsed="0.000772"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:29.631731" elapsed="0.000972"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:29.633178" elapsed="0.000069"/>
</return>
<status status="PASS" start="2026-04-13T02:58:29.632824" elapsed="0.000630"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:29.632791" elapsed="0.000764"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:29.633672" elapsed="0.000035"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:29.639575" elapsed="0.001159"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:29.641075" elapsed="0.000622"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:29.642152" elapsed="0.000436"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:29.634332" elapsed="0.008415"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:29.282897" elapsed="0.359985"/>
</kw>
<msg time="2026-04-13T02:58:29.642966" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:29.282144" elapsed="0.360904"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:29.281565" elapsed="0.361601"/>
</kw>
<msg time="2026-04-13T02:58:29.643226" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:29.281075" elapsed="0.362220"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:29.646339" elapsed="0.000359"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:29.646852" elapsed="0.000153"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:29.647142" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:29.643722" elapsed="0.003571"/>
</kw>
<msg time="2026-04-13T02:58:29.647389" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:29.280012" elapsed="0.367403"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:29.647874" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:29.647596" elapsed="0.000322"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:29.647964" elapsed="0.000031"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:29.278985" elapsed="0.369111"/>
</kw>
<msg time="2026-04-13T02:58:29.648183" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:29.278542" elapsed="0.369666"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:29.649230" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:29.648949" elapsed="0.000308"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:29.650034" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:29.653590" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:29.654511" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:29.654041" elapsed="0.000518"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:29.655164" level="INFO">${conn_id} = 191</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:29.654719" elapsed="0.000513"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:29.656457" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:29.656586" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:29.655910" elapsed="0.000702"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:29.656851" elapsed="0.000662"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:29.659437" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:29.968325" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:29 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:29.658883" elapsed="0.309688"/>
</kw>
<msg time="2026-04-13T02:58:29.968736" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:29.657753" elapsed="0.311201"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:29.655444" elapsed="0.313691"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:29.969658" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:58:29.982322" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:29.982668" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:58:29.982784" 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-04-13T02:58:29.969367" elapsed="0.013472"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:29.983239" elapsed="0.000582"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:29.985069" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:29.984224" elapsed="0.000948"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:29.985718" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:29.985360" elapsed="0.000480"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:29.985305" elapsed="0.000581"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:29.986124" elapsed="0.000047"/>
</return>
<status status="PASS" start="2026-04-13T02:58:29.985965" elapsed="0.000256"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:29.985943" elapsed="0.000314"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:29.986308" elapsed="0.000020"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.000753" 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-04-13T02:58:30.001621" elapsed="0.000218"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:30.001981" elapsed="0.000109"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:29.986794" elapsed="0.015355"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:29.652326" elapsed="0.349925"/>
</kw>
<msg time="2026-04-13T02:58:30.002318" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:29.651661" elapsed="0.350727"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:29.651097" elapsed="0.351440"/>
</kw>
<msg time="2026-04-13T02:58:30.002588" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:29.650336" elapsed="0.352527"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.005793" elapsed="0.000433"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:30.006385" elapsed="0.000208"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:30.007115" 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-04-13T02:58:30.003270" elapsed="0.004013"/>
</kw>
<msg time="2026-04-13T02:58:30.007389" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:29.649465" elapsed="0.357953"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.007896" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:30.007607" elapsed="0.000342"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:30.008000" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:30.008209" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:29.648434" elapsed="0.359810"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.008678" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:30.008404" elapsed="0.000328"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:30.008914" elapsed="0.000329"/>
</kw>
<arg>${index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:58:28.874257" elapsed="1.135052"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-13T02:58:28.874046" elapsed="1.135298"/>
</iter>
<iter>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.010324" level="INFO">${host_index} = 2</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:30.010011" elapsed="0.000341"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.022243" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:30.021890" elapsed="0.000384"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:30.022333" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T02:58:30.022504" 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-04-13T02:58:30.021511" elapsed="0.001020"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.026019" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:30.025672" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:30.028600" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:58:30.028134" elapsed="0.001093">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:58:30.026158" elapsed="0.003155">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:30.029490" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:30.029349" elapsed="0.000298"/>
</branch>
<status status="FAIL" start="2026-04-13T02:58:30.026133" elapsed="0.003544">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:58:30.030081" elapsed="0.000028"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:30.030162" elapsed="0.000019"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:58:30.022834" elapsed="0.007445">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:30.030342" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 2.</doc>
<status status="FAIL" start="2026-04-13T02:58:30.021129" elapsed="0.009316">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:30.030617" elapsed="0.000041"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:30.030713" elapsed="0.000016"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:58:30.018857" elapsed="0.011957">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:30.010495" elapsed="0.020385"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:30.032204" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:30.031896" elapsed="0.000337"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:30.033092" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:30.037088" elapsed="0.000357"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.038705" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:30.037666" elapsed="0.001128"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:30.039778" level="INFO">${conn_id} = 194</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:30.038999" elapsed="0.000822"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.042251" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:30.042433" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:30.041677" elapsed="0.000867"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.043290" elapsed="0.000677"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:30.045911" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:30.360731" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:23 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:30.045497" elapsed="0.315503"/>
</kw>
<msg time="2026-04-13T02:58:30.361167" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.044759" elapsed="0.316519"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:30.040349" elapsed="0.321095"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:30.362125" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:30.385716" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:30.386078" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:30.386240" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:30.361764" elapsed="0.024563"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:30.386923" elapsed="0.000504"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.389295" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:30.387987" elapsed="0.001499"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:30.390315" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:30.389831" elapsed="0.000746"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:30.389774" elapsed="0.000895"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:30.391273" elapsed="0.000070"/>
</return>
<status status="PASS" start="2026-04-13T02:58:30.390799" elapsed="0.000805"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:30.390763" elapsed="0.000985"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:30.391837" elapsed="0.000037"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.398516" elapsed="0.000804"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:30.399581" elapsed="0.000546"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:30.400366" elapsed="0.000337"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:30.392593" elapsed="0.008213"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:30.035149" elapsed="0.365756"/>
</kw>
<msg time="2026-04-13T02:58:30.400962" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.034423" elapsed="0.366600"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:30.033880" elapsed="0.367247"/>
</kw>
<msg time="2026-04-13T02:58:30.401169" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.033374" elapsed="0.367842"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.405157" 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-04-13T02:58:30.405867" elapsed="0.000225"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:30.406280" elapsed="0.000140"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:30.401536" elapsed="0.004958"/>
</kw>
<msg time="2026-04-13T02:58:30.406618" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:30.032439" elapsed="0.374232"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.407258" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:30.406915" elapsed="0.000398"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:30.407370" elapsed="0.000042"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:30.031468" elapsed="0.376069"/>
</kw>
<msg time="2026-04-13T02:58:30.407683" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:30.031025" elapsed="0.376694"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:30.409380" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:30.409094" elapsed="0.000314"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:30.410228" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:30.414585" elapsed="0.000373"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.416200" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:30.415158" elapsed="0.001128"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:30.417309" level="INFO">${conn_id} = 197</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:30.416490" elapsed="0.000862"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.419339" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:30.419517" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:30.418799" elapsed="0.000826"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.420355" elapsed="0.000676"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:30.422956" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:30.750291" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:30 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:30.422610" elapsed="0.327846"/>
</kw>
<msg time="2026-04-13T02:58:30.750598" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.421931" elapsed="0.328806"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:30.417671" elapsed="0.333234"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:30.751562" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:30.765042" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:30.765204" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:30.765299" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:30.751203" elapsed="0.014134"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:30.765586" elapsed="0.000275"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.766695" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:30.766107" elapsed="0.000673"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:30.767146" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:30.766925" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:30.766897" elapsed="0.000462"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:30.767594" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-13T02:58:30.767415" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:30.767399" elapsed="0.000371"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:30.767805" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.770914" elapsed="0.000838"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:30.772000" elapsed="0.000432"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:30.772677" elapsed="0.000300"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:30.768127" elapsed="0.004940"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:30.412614" elapsed="0.360549"/>
</kw>
<msg time="2026-04-13T02:58:30.773221" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.411953" elapsed="0.361377"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:30.411226" elapsed="0.362187"/>
</kw>
<msg time="2026-04-13T02:58:30.773454" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.410578" elapsed="0.362921"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.776265" elapsed="0.000310"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:30.776738" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:30.777013" 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-04-13T02:58:30.773806" elapsed="0.003353"/>
</kw>
<msg time="2026-04-13T02:58:30.777252" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:30.409614" elapsed="0.367696"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.777753" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:30.777489" elapsed="0.000305"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:30.777839" elapsed="0.000031"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:30.408565" elapsed="0.369406"/>
</kw>
<msg time="2026-04-13T02:58:30.778059" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:30.408007" elapsed="0.370077"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:30.778992" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:30.778710" elapsed="0.000308"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:30.779840" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:30.783046" elapsed="0.000257"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.783919" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:30.783439" elapsed="0.000527"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:30.784523" level="INFO">${conn_id} = 200</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:30.784107" elapsed="0.000442"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:30.785748" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:30.785872" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:30.785176" elapsed="0.000720"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.786068" elapsed="0.000677"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:30.788613" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:31.115715" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:30 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:30.788065" elapsed="0.327886"/>
</kw>
<msg time="2026-04-13T02:58:31.116083" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.786953" elapsed="0.329307"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:30.784766" elapsed="0.331672"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:31.116985" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:58:31.129705" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:31.129911" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:58:31.129997" 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-04-13T02:58:31.116713" elapsed="0.013327"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:31.130387" elapsed="0.000578"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:31.132041" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:31.131311" elapsed="0.000808"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:31.132580" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:31.132309" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:31.132242" elapsed="0.000550"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:31.133115" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-04-13T02:58:31.132918" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:31.132866" elapsed="0.000411"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:31.133338" elapsed="0.000025"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:31.148517" 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-04-13T02:58:31.149554" elapsed="0.000589"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:31.150338" 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-04-13T02:58:31.134037" elapsed="0.016515"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:30.781961" elapsed="0.368738"/>
</kw>
<msg time="2026-04-13T02:58:31.150869" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.781108" elapsed="0.369845"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:30.780578" elapsed="0.370489"/>
</kw>
<msg time="2026-04-13T02:58:31.151130" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:30.780103" elapsed="0.371091"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:31.154417" elapsed="0.000346"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:31.154950" elapsed="0.000207"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:31.155350" elapsed="0.000140"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:31.151607" elapsed="0.003963"/>
</kw>
<msg time="2026-04-13T02:58:31.155727" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:30.779217" elapsed="0.376549"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:31.156246" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:31.155982" elapsed="0.000334"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:31.156375" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T02:58:31.156600" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:30.778302" elapsed="0.378365"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:31.157217" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:31.156883" elapsed="0.000402"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:31.157464" elapsed="0.000510"/>
</kw>
<arg>${index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:58:30.009688" elapsed="1.148366"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-13T02:58:30.009456" elapsed="1.148640"/>
</iter>
<iter>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:31.159485" level="INFO">${host_index} = 3</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:31.159045" elapsed="0.000469"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:31.174045" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:31.173592" elapsed="0.000485"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:31.174137" elapsed="0.000046"/>
</return>
<msg time="2026-04-13T02:58:31.174336" 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-04-13T02:58:31.173061" elapsed="0.001312"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:31.178340" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:31.178041" elapsed="0.000349"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:31.182163" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:58:31.181449" elapsed="0.001432">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:58:31.178571" elapsed="0.004397">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:31.183149" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:31.183004" elapsed="0.000227"/>
</branch>
<status status="FAIL" start="2026-04-13T02:58:31.178536" elapsed="0.004730">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:58:31.183709" elapsed="0.000028"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:31.183788" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:58:31.175017" elapsed="0.008884">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:31.183961" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 3.</doc>
<status status="FAIL" start="2026-04-13T02:58:31.172563" elapsed="0.011491">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:31.184219" elapsed="0.000022"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:31.184292" elapsed="0.000020"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:58:31.169517" elapsed="0.014915">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:31.159814" elapsed="0.024710"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:31.186158" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:31.185742" elapsed="0.000454"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:31.187270" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:31.191268" elapsed="0.000345"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:31.192842" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:31.191836" elapsed="0.001092"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:31.193920" 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-04-13T02:58:31.193130" elapsed="0.000838"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:31.196128" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:31.196303" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:31.195557" elapsed="0.000910"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:31.197207" elapsed="0.000682"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:31.200437" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:31.570124" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:22 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:31.199986" elapsed="0.370295"/>
</kw>
<msg time="2026-04-13T02:58:31.570428" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:31.199009" elapsed="0.371532"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:31.194420" elapsed="0.376316"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:31.571413" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:31.594799" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:31.595136" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:31.595294" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:31.571042" elapsed="0.024335"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:31.595960" elapsed="0.000478"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:31.598248" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:31.596995" elapsed="0.001436"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:31.599341" elapsed="0.000054"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:31.598765" elapsed="0.000976"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:31.598708" elapsed="0.001128"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:31.600548" elapsed="0.000142"/>
</return>
<status status="PASS" start="2026-04-13T02:58:31.599998" elapsed="0.000955"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:31.599951" elapsed="0.001066"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:31.601095" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:31.606962" elapsed="0.000803"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:31.608013" elapsed="0.000440"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:31.608712" elapsed="0.000308"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:31.601868" elapsed="0.007248"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:31.189271" elapsed="0.419945"/>
</kw>
<msg time="2026-04-13T02:58:31.609270" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:31.188575" elapsed="0.420750"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:31.188060" elapsed="0.421348"/>
</kw>
<msg time="2026-04-13T02:58:31.609449" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:31.187548" elapsed="0.421947"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:31.612382" elapsed="0.000352"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:31.612886" elapsed="0.000153"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:31.613250" elapsed="0.000105"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:31.609850" elapsed="0.003560"/>
</kw>
<msg time="2026-04-13T02:58:31.613506" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:31.186494" elapsed="0.427040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:31.614149" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:31.613829" elapsed="0.000368"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:31.614244" elapsed="0.000030"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:31.185165" elapsed="0.429211"/>
</kw>
<msg time="2026-04-13T02:58:31.614469" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:31.184715" elapsed="0.429779"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:31.615877" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:31.615576" elapsed="0.000328"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:31.616681" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:31.621326" elapsed="0.000523"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:31.623253" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:31.622113" elapsed="0.001229"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:31.624425" level="INFO">${conn_id} = 206</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:31.623563" elapsed="0.000917"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:31.626814" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:31.627024" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:31.626160" elapsed="0.001009"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:31.628182" elapsed="0.000703"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:31.631086" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:31.965847" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:31 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:31.630627" elapsed="0.335407"/>
</kw>
<msg time="2026-04-13T02:58:31.966180" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:31.629756" elapsed="0.336605"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:31.624888" elapsed="0.341631"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:31.967188" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:31.980622" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:31.981043" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:31.981209" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:31.966834" elapsed="0.014464"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:31.982010" elapsed="0.000557"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:31.984472" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:31.983161" elapsed="0.001536"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:31.985507" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:31.985035" elapsed="0.000781"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:31.984975" elapsed="0.000907"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:31.986462" elapsed="0.000071"/>
</return>
<status status="PASS" start="2026-04-13T02:58:31.986035" elapsed="0.000816"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:31.985997" elapsed="0.000925"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:31.987009" elapsed="0.000036"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:31.992376" elapsed="0.000800"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:31.993422" elapsed="0.000470"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:31.994142" elapsed="0.000308"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:31.987790" elapsed="0.006753"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:31.618937" elapsed="0.375728"/>
</kw>
<msg time="2026-04-13T02:58:31.994726" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:31.618132" elapsed="0.376654"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:31.617505" elapsed="0.377362"/>
</kw>
<msg time="2026-04-13T02:58:31.994908" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:31.617007" elapsed="0.377945"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:31.997599" elapsed="0.000358"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:31.998113" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:31.998391" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:31.995247" elapsed="0.003291"/>
</kw>
<msg time="2026-04-13T02:58:31.998659" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:31.616110" elapsed="0.382577"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:31.999131" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:31.998872" elapsed="0.000300"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:31.999218" elapsed="0.000032"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:31.615147" elapsed="0.384200"/>
</kw>
<msg time="2026-04-13T02:58:31.999434" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:31.614668" elapsed="0.384790"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:32.000455" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:32.000182" elapsed="0.000362"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:32.001298" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:32.004478" elapsed="0.000271"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.005344" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:32.004885" elapsed="0.000505"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:32.006009" 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-04-13T02:58:32.005531" elapsed="0.000508"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.007280" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:32.007408" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:32.006715" elapsed="0.000720"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.007619" elapsed="0.000726"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:32.010376" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:32.345197" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:31 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:32.009765" elapsed="0.335653"/>
</kw>
<msg time="2026-04-13T02:58:32.345548" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.008568" elapsed="0.337172"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:32.006263" elapsed="0.339649"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:32.346446" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:58:32.359136" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:32.359459" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:58:32.359571" 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-04-13T02:58:32.346165" elapsed="0.013501"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:32.360247" elapsed="0.000568"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.362000" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:32.361219" elapsed="0.000885"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:32.362874" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:32.362344" elapsed="0.000651"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:32.362289" elapsed="0.000761"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:32.363550" elapsed="0.000071"/>
</return>
<status status="PASS" start="2026-04-13T02:58:32.363287" elapsed="0.000451"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:32.363247" elapsed="0.000552"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:32.363882" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.380130" elapsed="0.000610"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:32.381086" elapsed="0.000194"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:32.381425" 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-04-13T02:58:32.364610" elapsed="0.016976"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:32.003442" elapsed="0.378451"/>
</kw>
<msg time="2026-04-13T02:58:32.381962" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.002622" elapsed="0.379406"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:32.002105" elapsed="0.380005"/>
</kw>
<msg time="2026-04-13T02:58:32.382172" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.001564" elapsed="0.380654"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.384914" elapsed="0.000322"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:32.385420" elapsed="0.000161"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:32.385896" elapsed="0.000102"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:32.382522" elapsed="0.003529"/>
</kw>
<msg time="2026-04-13T02:58:32.386166" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:32.000767" elapsed="0.385426"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.386652" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:32.386382" elapsed="0.000323"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:32.386755" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:32.386918" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:31.999798" elapsed="0.387146"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.387341" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:32.387089" elapsed="0.000309"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:32.387534" elapsed="0.000321"/>
</kw>
<arg>${index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:58:31.158519" elapsed="1.229458"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-13T02:58:31.158235" elapsed="1.229775"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-13T02:58:28.873900" elapsed="3.514150"/>
</for>
<doc>This keyword cleansup export files of a cluster</doc>
<status status="PASS" start="2026-04-13T02:58:28.870085" elapsed="3.518029"/>
</kw>
<kw name="Schedule Export" owner="DaeximKeywords">
<if>
<branch type="IF" condition="${include}">
<kw name="Set Variable" owner="BuiltIn">
<var>${file}</var>
<arg>${EXPORT_INCLUDE_FILE}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:32.392617" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:32.392438" elapsed="0.000254"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.393200" level="INFO">${file} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json</msg>
<var>${file}</var>
<arg>${exclude}</arg>
<arg>${EXPORT_EXCLUDE_FILE}</arg>
<arg>${EXPORT_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:32.392859" elapsed="0.000368"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:32.392720" elapsed="0.000548"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:32.392415" elapsed="0.000875"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T02:58:32.393568" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T02:58:32.393750" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "${time}",
    "data-export-import:local-node-only": "${flag}"
   }
 }
</msg>
<var>${json}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T02:58:32.393423" elapsed="0.000354"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.394291" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "500",
    "data-export-import:local-node-only": "false"
   }
 }
</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-13T02:58:32.393917" elapsed="0.000401"/>
</kw>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.395169" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:32.394855" elapsed="0.000340"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.406941" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:32.406589" elapsed="0.000381"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:32.407027" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T02:58:32.407190" 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-04-13T02:58:32.406245" elapsed="0.000970"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.410275" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:32.409940" 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="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:32.413205" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:58:32.412352" elapsed="0.001491">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:58:32.410398" elapsed="0.003532">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:32.414103" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:32.413964" elapsed="0.000237"/>
</branch>
<status status="FAIL" start="2026-04-13T02:58:32.410376" elapsed="0.003851">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:58:32.414697" elapsed="0.000027"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:32.414776" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:58:32.407492" elapsed="0.007397">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:32.414947" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-13T02:58:32.405825" elapsed="0.009218">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:32.415218" elapsed="0.000022"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:32.415291" elapsed="0.000015"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:58:32.403583" elapsed="0.011863">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:32.395337" elapsed="0.020175"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:32.417079" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:32.416524" elapsed="0.000584"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:32.417903" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:32.420923" elapsed="0.000269"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.421941" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:32.421328" elapsed="0.000660"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:32.422686" level="INFO">${conn_id} = 212</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:32.422135" elapsed="0.000578"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.424274" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:32.424412" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:32.423568" elapsed="0.000883"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.424689" elapsed="0.000690"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:32.427449" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:32.781558" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:29 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:32.426921" elapsed="0.354919"/>
</kw>
<msg time="2026-04-13T02:58:32.781940" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.425660" elapsed="0.356377"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:32.422917" elapsed="0.359340"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:32.782826" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:32.805563" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:32.805915" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:32.806013" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:32.782509" elapsed="0.023556"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:32.806606" elapsed="0.000520"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.808278" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:32.807491" elapsed="0.000897"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:32.808892" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:32.808562" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:32.808511" elapsed="0.000541"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:32.809397" elapsed="0.000065"/>
</return>
<status status="PASS" start="2026-04-13T02:58:32.809168" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:32.809135" elapsed="0.000452"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:32.809692" elapsed="0.000034"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.830058" elapsed="0.000707"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:32.830962" elapsed="0.000178"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:32.831296" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:32.810433" elapsed="0.021019"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:32.419868" elapsed="0.411682"/>
</kw>
<msg time="2026-04-13T02:58:32.831608" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.419197" elapsed="0.412486"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:32.418687" elapsed="0.413078"/>
</kw>
<msg time="2026-04-13T02:58:32.831806" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.418194" elapsed="0.413656"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.835118" 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-04-13T02:58:32.835589" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:32.835888" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:32.832145" elapsed="0.003890"/>
</kw>
<msg time="2026-04-13T02:58:32.836131" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:32.417324" elapsed="0.418831"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.836583" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:32.836334" elapsed="0.000303"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:32.836687" elapsed="0.000033"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:32.416118" elapsed="0.420699"/>
</kw>
<msg time="2026-04-13T02:58:32.836903" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:32.415674" elapsed="0.421253"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:32.838422" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:32.838122" elapsed="0.000330"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:32.839270" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:32.842335" elapsed="0.000273"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.843385" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:32.842761" elapsed="0.000670"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:32.844079" level="INFO">${conn_id} = 215</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:32.843572" elapsed="0.000533"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:32.845444" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:32.845583" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:32.844774" elapsed="0.000848"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.845863" elapsed="0.000651"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:32.848540" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:33.165743" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:32 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:32.848022" elapsed="0.318018"/>
</kw>
<msg time="2026-04-13T02:58:33.166151" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.846796" elapsed="0.319461"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:32.844305" elapsed="0.322184"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:33.167111" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:33.179811" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:33.180087" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:33.180151" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:33.166800" elapsed="0.013385"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:33.180537" elapsed="0.000499"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.181862" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.181297" elapsed="0.000631"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:33.182438" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:33.182056" elapsed="0.000453"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.182014" elapsed="0.000529"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:33.182854" elapsed="0.000048"/>
</return>
<status status="PASS" start="2026-04-13T02:58:33.182699" elapsed="0.000249"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.182673" elapsed="0.000309"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:33.183030" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:33.199917" elapsed="0.000733"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:33.200866" elapsed="0.000194"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:33.201216" 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-04-13T02:58:33.183495" elapsed="0.017967"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:32.841245" elapsed="0.360316"/>
</kw>
<msg time="2026-04-13T02:58:33.201639" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.840533" elapsed="0.361179"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:32.840027" elapsed="0.361769"/>
</kw>
<msg time="2026-04-13T02:58:33.201837" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:32.839537" elapsed="0.362346"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:33.204811" elapsed="0.000335"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:33.205295" elapsed="0.000153"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:33.205580" 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-04-13T02:58:33.202193" elapsed="0.003568"/>
</kw>
<msg time="2026-04-13T02:58:33.205858" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:32.838668" elapsed="0.367216"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.206329" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.206071" elapsed="0.000299"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:33.206418" elapsed="0.000036"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:32.837480" elapsed="0.369076"/>
</kw>
<msg time="2026-04-13T02:58:33.207068" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:32.837079" elapsed="0.370014"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:33.208015" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:33.207736" elapsed="0.000305"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:33.208797" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:33.208651" 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 with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:33.211906" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:33.211559" elapsed="0.000408"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.211533" elapsed="0.000460"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:33.212275" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:33.212127" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.212951" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.212543" elapsed="0.000455"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:33.213534" level="INFO">${conn_id} = 218</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:33.213156" elapsed="0.000404"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.215018" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:33.215098" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:33.214432" elapsed="0.000689"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:33.215267" elapsed="0.000436"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:33.217011" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:33.605883" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:33 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:33.216202" elapsed="0.389882"/>
</kw>
<msg time="2026-04-13T02:58:33.606274" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:33.215859" elapsed="0.390503"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:33.213900" elapsed="0.392581"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:33.607001" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:58:33.620255" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:33.620549" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:58:33.620665" 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-04-13T02:58:33.606729" elapsed="0.013988"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:33.621102" elapsed="0.000622"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.622450" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.621992" elapsed="0.000522"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:33.622912" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:33.622657" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.622599" elapsed="0.000419"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:33.623246" elapsed="0.000046"/>
</return>
<status status="PASS" start="2026-04-13T02:58:33.623093" elapsed="0.000246"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.623071" elapsed="0.000301"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:33.623419" elapsed="0.000020"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:33.629995" elapsed="0.000867"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:33.631194" elapsed="0.000452"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:33.631848" elapsed="0.000154"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:33.623981" elapsed="0.008103"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:33.211011" elapsed="0.421208"/>
</kw>
<msg time="2026-04-13T02:58:33.632308" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:33.210096" elapsed="0.422293"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:33.209551" elapsed="0.422960"/>
</kw>
<msg time="2026-04-13T02:58:33.632579" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:33.209064" elapsed="0.423606"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:33.636560" 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-04-13T02:58:33.637373" elapsed="0.000230"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:33.637806" elapsed="0.000139"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:33.633182" elapsed="0.004843"/>
</kw>
<msg time="2026-04-13T02:58:33.638170" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:33.208242" elapsed="0.429971"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.638935" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.638484" elapsed="0.000526"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:33.639077" elapsed="0.000055"/>
</return>
<msg time="2026-04-13T02:58:33.639315" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:33.207331" elapsed="0.432022"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.639951" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.639562" elapsed="0.000462"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:33.640493" elapsed="0.000465"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:58:32.394525" elapsed="1.246526"/>
</kw>
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.648053" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:33.647613" elapsed="0.000474"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:33.648158" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T02:58:33.648331" 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-04-13T02:58:33.647250" elapsed="0.001106"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.664943" level="INFO">/rests/operations/data-export-import:schedule-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.664591" elapsed="0.000413"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.665761" level="INFO"> {
   "input": {
    "data-export-import:run-at": "500",
    "data-export-import:local-node-only": "false"
   }
 }
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.665180" elapsed="0.000630"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.666214" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.665962" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.666675" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.666413" elapsed="0.000307"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:33.667683" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:58:33.667425" elapsed="0.000286"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:58:33.668048" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:58:33.667860" elapsed="0.000221"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:33.668222" elapsed="0.000229"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.668979" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.668704" elapsed="0.000322"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:58:33.669075" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T02:58:33.669255" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:58:33.666986" elapsed="0.002294"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:33.691614" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 path_url=/rests/operations/data-export-import:schedule-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node015ib33ospstz84242o0unctd22.node0', 'Content-Length': '115', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body= {
   "input": {
    "data-export-import:run-at": "500",
    "data-export-import:local-node-only": "false"
   }
 }
 
 </msg>
<msg time="2026-04-13T02:58:33.692000" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:schedule-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '45'} 
 body={"data-export-import:output":{"result":true}} 
 </msg>
<msg time="2026-04-13T02:58:33.692361" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:58:33.671906" elapsed="0.020526"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.669374" elapsed="0.023197"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:33.693234" elapsed="0.000074"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:33.692685" elapsed="0.000744"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.669347" elapsed="0.024139"/>
</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-04-13T02:58:33.700356" level="INFO">{"data-export-import:output":{"result":true}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.696340" elapsed="0.004066"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.695788" elapsed="0.004654"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.695731" elapsed="0.004736"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.702982" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.700757" elapsed="0.002275"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.700525" elapsed="0.002545"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.700508" elapsed="0.002589"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.703699" 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-04-13T02:58:33.703263" elapsed="0.000464"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:33.704026" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:33.703799" elapsed="0.000285"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.704565" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:33.704257" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.704108" elapsed="0.000536"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.703780" elapsed="0.000888"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.705188" 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-04-13T02:58:33.704812" elapsed="0.000403"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:33.705505" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:33.705285" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.706052" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:33.705749" elapsed="0.000330"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.705585" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.705267" elapsed="0.000869"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:33.706281" elapsed="0.000371"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:33.707156" 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-04-13T02:58:33.706806" elapsed="0.000376"/>
</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-04-13T02:58:33.707323" elapsed="0.002240"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:58:33.694470" elapsed="0.015184"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:33.709953" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:33.709827" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.709801" elapsed="0.000227"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:58:33.712716" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:58:33.710170" elapsed="0.002580"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:58:33.712800" elapsed="0.000046"/>
</return>
<msg time="2026-04-13T02:58:33.712994" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:58:33.661304" elapsed="0.051716"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:33.713093" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:58:33.713248" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:58:33.657994" elapsed="0.055279"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:33.713327" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:58:33.713478" level="INFO">${response_json} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_json}</var>
<arg>${SCHEDULE_EXPORT_URL}</arg>
<arg>${json}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:33.646580" elapsed="0.066924"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.713963" level="INFO">{
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.713678" elapsed="0.000330"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Schedule Export job</doc>
<status status="PASS" start="2026-04-13T02:58:32.388394" elapsed="1.325675"/>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.721683" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:33.721349" elapsed="0.000362"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:33.721760" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:33.721913" 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-04-13T02:58:33.721008" elapsed="0.000929"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.740578" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.740015" elapsed="0.000649"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.741067" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.740823" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.741506" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.741258" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.741940" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.741699" elapsed="0.000285"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:33.742847" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:58:33.742615" elapsed="0.000307"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:58:33.743251" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:58:33.743071" elapsed="0.000206"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:33.743413" elapsed="0.000211"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.744059" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.743782" elapsed="0.000326"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:58:33.744159" elapsed="0.000054"/>
</return>
<msg time="2026-04-13T02:58:33.744354" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:58:33.742205" elapsed="0.002177"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:33.765286" level="INFO">POST Request : url=http://10.30.170.138:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:33.766017" level="INFO">POST Response : url=http://10.30.170.138:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01cybbalzw65nhdmbt9a0oztxa1.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Sun, 12-Apr-2026 02:58:33 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Content-Type': 'application/yang-data+json', 'Content-Length': '373'} 
 body={"data-export-import:output":{"run-at":"2026-04-13T02:58:38Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:33Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:33Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:33Z","status":"scheduled"}]}} 
 </msg>
<msg time="2026-04-13T02:58:33.766229" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:58:33.746556" elapsed="0.019716"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.744476" elapsed="0.021881"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:33.766732" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:33.766408" elapsed="0.000430"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.744452" elapsed="0.022491"/>
</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-04-13T02:58:33.774835" level="INFO">{"data-export-import:output":{"run-at":"2026-04-13T02:58:38Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:33Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:33Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:33Z","status":"scheduled"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.769045" elapsed="0.005992"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.768508" elapsed="0.006613"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.768463" elapsed="0.006714"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.778135" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.775807" elapsed="0.002374"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.775305" elapsed="0.002910"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.775267" elapsed="0.002972"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.778831" 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-04-13T02:58:33.778407" elapsed="0.000456"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:33.779213" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:33.778972" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.779768" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:33.779443" elapsed="0.000352"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.779297" elapsed="0.000533"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.778947" elapsed="0.000904"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.780359" 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-04-13T02:58:33.779992" elapsed="0.000393"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:33.780690" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:33.780454" elapsed="0.000295"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.781231" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:33.780921" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.780772" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.780436" elapsed="0.000877"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:33.781455" elapsed="0.000364"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:33.782271" 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-04-13T02:58:33.781970" elapsed="0.000327"/>
</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-04-13T02:58:33.782438" elapsed="0.002353"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:58:33.767589" elapsed="0.017277"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:33.785070" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:33.784952" elapsed="0.000230"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.784930" elapsed="0.000277"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:58:33.787985" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:58:33.785352" elapsed="0.002664"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:58:33.788068" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T02:58:33.788245" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:58:33.736551" elapsed="0.051720"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:33.788339" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:58:33.788491" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:58:33.732842" elapsed="0.055675"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:33.788568" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:58:33.788761" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:33.718655" elapsed="0.070134"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.789322" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:58:38Z",
  "status": "scheduled"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.788965" elapsed="0.000419"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.789887" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:58:33.789544" elapsed="0.000371"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:33.790569" elapsed="0.000427"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${config_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:33.791864" elapsed="0.000350"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${models_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:33.792354" elapsed="0.000354"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${operational_json}</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:33.792846" elapsed="0.000336"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.793535" level="INFO">Did not Find all Json Files</msg>
<arg>Did not Find all Json Files</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.793326" elapsed="0.000253"/>
</kw>
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="PASS" start="2026-04-13T02:58:33.791411" elapsed="0.002237"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.791081" elapsed="0.002598"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="NOT RUN" start="2026-04-13T02:58:33.793883" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:33.793707" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.791060" elapsed="0.002902"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="PASS" start="2026-04-13T02:58:33.790189" elapsed="0.003820"/>
</kw>
<arg>${EXPORT_SCHEDULED_STATUS}</arg>
<arg>${SECOND_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="PASS" start="2026-04-13T02:58:33.714327" elapsed="0.079736"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.804341" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:33.803956" elapsed="0.000418"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:33.804511" elapsed="0.000048"/>
</return>
<msg time="2026-04-13T02:58:33.804706" 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-04-13T02:58:33.803572" elapsed="0.001159"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.819440" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.818986" elapsed="0.000523"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.819935" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.819687" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.820419" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.820117" elapsed="0.000359"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.820947" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.820664" elapsed="0.000335"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:33.821982" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:58:33.821738" elapsed="0.000277"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:58:33.822397" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:58:33.822190" elapsed="0.000235"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:33.822587" elapsed="0.000255"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.823393" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.823092" elapsed="0.000358"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:58:33.823511" elapsed="0.000055"/>
</return>
<msg time="2026-04-13T02:58:33.823741" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:58:33.821249" elapsed="0.002522"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:33.835839" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node015ib33ospstz84242o0unctd22.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:33.836114" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '373'} 
 body={"data-export-import:output":{"run-at":"2026-04-13T02:58:38Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:33Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:33Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:33Z","status":"scheduled"}]}} 
 </msg>
<msg time="2026-04-13T02:58:33.836309" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:58:33.826517" elapsed="0.009830"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.823873" elapsed="0.012557"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:33.836716" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:33.836479" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.823846" elapsed="0.012993"/>
</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-04-13T02:58:33.842006" level="INFO">{"data-export-import:output":{"run-at":"2026-04-13T02:58:38Z","status":"scheduled","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:33Z","status":"scheduled"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:33Z","status":"scheduled"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:33Z","status":"scheduled"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.838230" elapsed="0.003858"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.837942" elapsed="0.004200"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.837919" elapsed="0.004262"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.845696" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.842582" elapsed="0.003166"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.842275" elapsed="0.003510"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.842247" elapsed="0.003563"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.846441" 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-04-13T02:58:33.845997" elapsed="0.000481"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:33.846972" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:33.846584" elapsed="0.000477"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.847732" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:33.847312" elapsed="0.000532"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.847103" elapsed="0.000795"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.846556" elapsed="0.001370"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.848623" 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-04-13T02:58:33.848125" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:33.849088" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:33.848786" elapsed="0.000386"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.849852" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:33.849423" elapsed="0.000456"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:33.849209" elapsed="0.000708"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.848758" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:33.850110" elapsed="0.000566"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:33.851309" 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-04-13T02:58:33.850898" elapsed="0.000447"/>
</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-04-13T02:58:33.851545" elapsed="0.002829"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:58:33.837402" elapsed="0.017053"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:33.854691" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:33.854547" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:33.854522" elapsed="0.000242"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:58:33.857648" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:58:33.854912" elapsed="0.002769"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:58:33.857737" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T02:58:33.857958" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:58:33.815690" elapsed="0.042308"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:33.858095" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:58:33.858297" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:58:33.812321" elapsed="0.046014"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:33.858409" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:33.858622" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:33.801264" elapsed="0.057415"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.859365" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:58:38Z",
  "status": "scheduled"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:33.858914" elapsed="0.000520"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.860098" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-1...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:58:33.859655" elapsed="0.000483"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<msg time="2026-04-13T02:58:33.861811" level="FAIL">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:58:38Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</msg>
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="FAIL" start="2026-04-13T02:58:33.861208" elapsed="0.000725">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:58:38Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:58:33.862342" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:33.862073" elapsed="0.000359"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="NOT RUN" start="2026-04-13T02:58:33.862738" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:33.862473" elapsed="0.000342"/>
</branch>
<status status="NOT RUN" start="2026-04-13T02:58:33.862040" elapsed="0.000802"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="FAIL" start="2026-04-13T02:58:33.860647" elapsed="0.002395">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:58:38Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<arg>${EXPORT_COMPLETE_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="FAIL" start="2026-04-13T02:58:33.794799" elapsed="0.068391">'{
 "data-export-import:output": {
  "nodes": [
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.138:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.170.156:2550",
    "status": "scheduled"
   },
   {
    "last-change": "2026-04-13T02:58:33Z",
    "node-name": "10.30.171.185:2550",
    "status": "scheduled"
   }
  ],
  "run-at": "2026-04-13T02:58:38Z",
  "status": "scheduled"
 }
}
' does not match '"status": "complete"'</status>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.876446" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:38.876048" elapsed="0.000432"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:38.876545" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T02:58:38.876749" 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-04-13T02:58:38.875646" elapsed="0.001128"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.890118" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:38.889809" elapsed="0.000368"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.890566" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:38.890327" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.891006" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:38.890762" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.891422" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:38.891185" elapsed="0.000279"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:38.892280" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T02:58:38.892074" elapsed="0.000236"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T02:58:38.892663" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T02:58:38.892474" elapsed="0.000216"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:38.892825" elapsed="0.000203"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.893412" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:38.893167" elapsed="0.000288"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T02:58:38.893502" elapsed="0.000046"/>
</return>
<msg time="2026-04-13T02:58:38.893701" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T02:58:38.891680" elapsed="0.002047"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:38.904961" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 path_url=/rests/operations/data-export-import:status-export 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node015ib33ospstz84242o0unctd22.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:38.906047" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:status-export 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '886'} 
 body={"data-export-import:output":{"status":"complete","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:38Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:38Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:38Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"}]}} 
 </msg>
<msg time="2026-04-13T02:58:38.906309" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T02:58:38.895818" elapsed="0.010568"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:38.893812" elapsed="0.012686"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:38.906963" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:38.906561" elapsed="0.000557"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:38.893791" elapsed="0.013375"/>
</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-04-13T02:58:38.914408" level="INFO">{"data-export-import:output":{"status":"complete","nodes":[{"node-name":"10.30.170.138:2550","last-change":"2026-04-13T02:58:38Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.171.185:2550","last-change":"2026-04-13T02:58:38Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"},{"node-name":"10.30.170.156:2550","last-change":"2026-04-13T02:58:38Z","data-files":["/tmp/karaf-0.24.0/daexim/odl_backup_config.json","/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"],"model-file":"/tmp/karaf-0.24.0/daexim/odl_backup_models.json","status":"complete"}]}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:38.909571" elapsed="0.004899"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:38.909081" elapsed="0.005428"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:38.909034" elapsed="0.005504"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.917104" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:38.914853" elapsed="0.002298"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:38.914604" elapsed="0.002582"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:38.914583" elapsed="0.002628"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.917813" 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-04-13T02:58:38.917384" elapsed="0.000455"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:38.918134" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:38.917912" elapsed="0.000278"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.918680" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:38.918364" elapsed="0.000343"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:38.918213" elapsed="0.000529"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:38.917893" elapsed="0.000870"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.919267" 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-04-13T02:58:38.918906" elapsed="0.000387"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:38.919575" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:38.919361" elapsed="0.000273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.920106" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:38.919815" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:38.919672" elapsed="0.000493"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:38.919344" elapsed="0.000842"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:38.920328" elapsed="0.000365"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:38.921183" 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-04-13T02:58:38.920843" elapsed="0.000366"/>
</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-04-13T02:58:38.921418" elapsed="0.002207"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T02:58:38.907996" elapsed="0.015717"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:38.923904" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:38.923791" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:38.923772" elapsed="0.000202"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T02:58:38.926805" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T02:58:38.924103" elapsed="0.002730"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T02:58:38.926884" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:38.927053" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T02:58:38.887126" elapsed="0.039953"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:38.927146" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:58:38.927295" level="INFO">${response_text} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T02:58:38.884415" elapsed="0.042905"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:38.927371" elapsed="0.000024"/>
</return>
<msg time="2026-04-13T02:58:38.927517" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:38.873482" elapsed="0.054061"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.927978" level="INFO">{
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:58:38Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.170.138:2550",
    "status": "complete"
   },
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:58:38Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.170.156:2550",
    "status": "complete"
   },
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "last-change": "2026-04-13T02:58:38Z",
    "model-file": "/tmp/karaf-0.24.0/daexim/odl_backup_models.json",
    "node-name": "10.30.171.185:2550",
    "status": "complete"
   }
  ],
  "status": "complete"
 }
}
</msg>
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:38.927719" elapsed="0.000312"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.928472" level="INFO">${response_json} = {
 "data-export-import:output": {
  "nodes": [
   {
    "data-files": [
     "/tmp/karaf-0.24.0/daexim/odl_backup_config.json",
     "/tmp/karaf-0.24.0/daexim/odl_backup_operational.json"
    ],
    "...</msg>
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:58:38.928169" elapsed="0.000330"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>"status": "${status}"</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:38.929120" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;initial&quot; or &quot;${status}&quot; == &quot;scheduled&quot; or &quot;${status}&quot; == &quot;skipped&quot;">
<kw name="Verify Json Files Not Present" owner="DaeximKeywords">
<arg>${output}</arg>
<doc>Verify if the json files are not present under the daexim folder</doc>
<status status="NOT RUN" start="2026-04-13T02:58:38.929885" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:38.929558" elapsed="0.000385"/>
</branch>
<branch type="ELSE">
<kw name="Verify Json Files Present" owner="DaeximKeywords">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${config_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:38.930560" elapsed="0.000348"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${models_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:38.931048" elapsed="0.000339"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>.*${operational_json}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:38.931525" elapsed="0.000341"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.932218" level="INFO">Found all Json Files</msg>
<arg>Found all Json Files</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:38.932013" elapsed="0.000248"/>
</kw>
<arg>${output}</arg>
<doc>Verify if the json files are generated after a export/export</doc>
<status status="PASS" start="2026-04-13T02:58:38.930127" elapsed="0.002239"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:38.929968" elapsed="0.002429"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:38.929539" elapsed="0.002881"/>
</if>
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="PASS" start="2026-04-13T02:58:38.928758" elapsed="0.003705"/>
</kw>
<arg>${EXPORT_COMPLETE_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="PASS" start="2026-04-13T02:58:38.864311" elapsed="0.068206"/>
</kw>
<arg>10 sec</arg>
<arg>5 sec</arg>
<arg>DaeximKeywords.Verify Export Status</arg>
<arg>${EXPORT_COMPLETE_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-13T02:58:33.794227" elapsed="5.138340"/>
</kw>
<kw name="Verify Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.933469" level="INFO">${host_index} = 2</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:38.933141" elapsed="0.000354"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:38.934417" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:38.934126" elapsed="0.000322"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:38.935427" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:38.938332" elapsed="0.000255"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.939116" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:38.938738" elapsed="0.000423"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:38.939690" level="INFO">${conn_id} = 221</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:38.939302" elapsed="0.000414"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:38.940571" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:38.940648" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:38.940296" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:38.940827" elapsed="0.000321"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:38.942258" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:39.270093" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:31 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:38.941697" elapsed="0.328624"/>
</kw>
<msg time="2026-04-13T02:58:39.270471" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:38.941302" elapsed="0.329310"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:38.939917" elapsed="0.330931"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:39.271811" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_config.json'.</msg>
<msg time="2026-04-13T02:58:39.285783" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:39.285958" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 3117 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<msg time="2026-04-13T02:58:39.286019" 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-04-13T02:58:39.271355" elapsed="0.014696"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:39.286282" elapsed="0.000488"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:39.287834" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:39.287148" elapsed="0.000782"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:39.288384" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:39.288103" elapsed="0.000385"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:39.288055" elapsed="0.000485"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:39.288925" elapsed="0.000062"/>
</return>
<status status="PASS" start="2026-04-13T02:58:39.288692" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:39.288631" elapsed="0.000485"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:39.289191" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:39.294950" 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-04-13T02:58:39.295447" elapsed="0.000168"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:39.295766" elapsed="0.000100"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:39.289924" elapsed="0.005995"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:38.937265" elapsed="0.358746"/>
</kw>
<msg time="2026-04-13T02:58:39.296068" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:38.936730" elapsed="0.359393"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:38.936201" elapsed="0.360003"/>
</kw>
<msg time="2026-04-13T02:58:39.296247" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:38.935713" elapsed="0.360579"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:39.299021" elapsed="0.000310"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:39.299486" elapsed="0.000186"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:39.299811" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:39.296571" elapsed="0.003387"/>
</kw>
<msg time="2026-04-13T02:58:39.300051" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 3117 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:38.934668" elapsed="0.365409"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:39.300508" level="INFO">-rw-rw-r-- 1 jenkins jenkins 3117 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:39.300256" elapsed="0.000296"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:39.300596" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:39.300769" level="INFO">${cfg} = -rw-rw-r-- 1 jenkins jenkins 3117 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<var>${cfg}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_DATA_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:38.933723" elapsed="0.367071"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:39.301173" level="INFO">-rw-rw-r-- 1 jenkins jenkins 3117 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_config.json</msg>
<arg>${cfg}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:39.300936" elapsed="0.000280"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${cfg}</arg>
<arg>.*${EXP_DATA_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:39.301351" elapsed="0.000380"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:39.302702" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:39.302416" elapsed="0.000313"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:39.303457" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:39.306349" elapsed="0.000255"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:39.307349" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:39.306755" elapsed="0.000640"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:39.307925" level="INFO">${conn_id} = 224</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:39.307539" elapsed="0.000413"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:39.308824" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:39.308899" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:39.308527" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:39.309063" elapsed="0.000318"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:39.310501" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:39.627767" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:39 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:39.309933" elapsed="0.318035"/>
</kw>
<msg time="2026-04-13T02:58:39.628068" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:39.309534" elapsed="0.318621"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:39.308154" elapsed="0.320188"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:39.628870" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_models.json'.</msg>
<msg time="2026-04-13T02:58:39.641899" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:39.642251" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<msg time="2026-04-13T02:58:39.642380" 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-04-13T02:58:39.628601" elapsed="0.013855"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:39.642915" elapsed="0.000555"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:39.644497" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:39.643869" elapsed="0.000770"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:39.645161" elapsed="0.000048"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:39.644844" elapsed="0.000587"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:39.644792" elapsed="0.000704"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:39.645906" elapsed="0.000065"/>
</return>
<status status="PASS" start="2026-04-13T02:58:39.645620" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:39.645586" elapsed="0.000515"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:39.646176" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:39.651015" 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-04-13T02:58:39.651617" elapsed="0.000191"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:39.651945" elapsed="0.000098"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:39.646994" elapsed="0.005102"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:39.305297" elapsed="0.346893"/>
</kw>
<msg time="2026-04-13T02:58:39.652248" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:39.304756" elapsed="0.347545"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:39.304215" elapsed="0.348166"/>
</kw>
<msg time="2026-04-13T02:58:39.652423" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:39.303741" elapsed="0.348727"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:39.655160" 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-04-13T02:58:39.655675" elapsed="0.000161"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:39.655971" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:39.652784" elapsed="0.003337"/>
</kw>
<msg time="2026-04-13T02:58:39.656218" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:39.302929" elapsed="0.353316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:39.656716" level="INFO">-rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:39.656431" elapsed="0.000339"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:39.656861" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T02:58:39.657041" level="INFO">${mdl} = -rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<var>${mdl}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${MODELS_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:39.302012" elapsed="0.355057"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:39.657481" level="INFO">-rw-rw-r-- 1 jenkins jenkins 8455 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_models.json</msg>
<arg>${mdl}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:39.657231" elapsed="0.000295"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${mdl}</arg>
<arg>.*${MODELS_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:39.657683" elapsed="0.000364"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:39.659007" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:39.658711" elapsed="0.000323"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:39.659860" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:39.662974" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:39.663789" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:39.663392" elapsed="0.000444"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:39.664359" level="INFO">${conn_id} = 227</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:39.663977" elapsed="0.000408"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:39.665598" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:39.665722" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:39.665037" elapsed="0.000717"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:39.665958" elapsed="0.000423"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:39.667868" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:39.993721" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:39 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:39.667079" elapsed="0.326805"/>
</kw>
<msg time="2026-04-13T02:58:39.993977" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:39.666589" elapsed="0.327478"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:39.664587" elapsed="0.329603"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:39.994757" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0/daexim/odl_backup_operational.json'.</msg>
<msg time="2026-04-13T02:58:40.007767" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:40.007906" level="INFO">${stdout} = -rw-rw-r-- 1 jenkins jenkins 34832 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<msg time="2026-04-13T02:58:40.007954" 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-04-13T02:58:39.994452" elapsed="0.013527"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:40.008188" elapsed="0.000264"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.008991" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.008667" elapsed="0.000369"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:40.009286" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:40.009129" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.009101" 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-04-13T02:58:40.009531" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-13T02:58:40.009421" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.009406" elapsed="0.000222"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:40.009680" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.012543" 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-04-13T02:58:40.013300" elapsed="0.000242"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:40.013768" 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-04-13T02:58:40.010011" elapsed="0.003990"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:39.661855" elapsed="0.352374"/>
</kw>
<msg time="2026-04-13T02:58:40.014315" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:39.661239" elapsed="0.353170"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:39.660640" elapsed="0.353892"/>
</kw>
<msg time="2026-04-13T02:58:40.014596" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:39.660146" elapsed="0.354542"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.018712" 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-04-13T02:58:40.019416" elapsed="0.000226"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:40.019864" elapsed="0.000146"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:40.015111" elapsed="0.004975"/>
</kw>
<msg time="2026-04-13T02:58:40.020225" level="INFO">${output} = -rw-rw-r-- 1 jenkins jenkins 34832 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:39.659252" elapsed="0.361018"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.021067" level="INFO">-rw-rw-r-- 1 jenkins jenkins 34832 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.020683" elapsed="0.000452"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:40.021200" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T02:58:40.021443" level="INFO">${opr} = -rw-rw-r-- 1 jenkins jenkins 34832 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<var>${opr}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}/daexim/${EXP_OPER_FILE}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:39.658273" elapsed="0.363205"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.021896" level="INFO">-rw-rw-r-- 1 jenkins jenkins 34832 Apr 13 02:58 /tmp/karaf-0.24.0/daexim/odl_backup_operational.json</msg>
<arg>${opr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.021637" elapsed="0.000303"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${opr}</arg>
<arg>.*${EXP_OPER_FILE}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:40.022077" elapsed="0.000340"/>
</kw>
<arg>${SECOND_CONTROLLER_INDEX}</arg>
<doc>Verify if the backedup files are present in the controller</doc>
<status status="PASS" start="2026-04-13T02:58:38.932829" elapsed="1.089652"/>
</kw>
<kw name="Verify Netconf Mount" owner="DaeximKeywords">
<kw name="Verify Status Information" owner="DaeximKeywords">
<for flavor="IN RANGE">
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:40.030070" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.029751" elapsed="0.000347"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:40.030149" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:40.030305" 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-04-13T02:58:40.029284" elapsed="0.001045"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.036933" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.036601" elapsed="0.000383"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.037376" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.037128" elapsed="0.000294"/>
</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-04-13T02:58:40.054775" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:40.055098" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Sun, 12-Apr-2026 02:58:40 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:40.055499" 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-04-13T02:58:40.039482" elapsed="0.016082"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.037510" elapsed="0.018207"/>
</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-04-13T02:58:40.056185" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.055788" elapsed="0.000555"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.037484" elapsed="0.018911"/>
</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-04-13T02:58:40.063071" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.059038" elapsed="0.004084"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.058446" elapsed="0.004712"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.058397" elapsed="0.004786"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.065640" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.063449" elapsed="0.002250"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.063240" elapsed="0.002494"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.063224" elapsed="0.002535"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.066323" 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-04-13T02:58:40.065921" elapsed="0.000429"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.066655" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.066421" elapsed="0.000295"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.067187" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.066885" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.066740" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.066403" elapsed="0.000867"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.067789" 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-04-13T02:58:40.067410" elapsed="0.000405"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.068098" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.067885" elapsed="0.000269"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.068723" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.068356" elapsed="0.000395"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.068178" elapsed="0.000609"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.067867" elapsed="0.000940"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.068947" elapsed="0.000378"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:40.069797" 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-04-13T02:58:40.069476" 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-04-13T02:58:40.069961" elapsed="0.002220"/>
</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-04-13T02:58:40.057331" elapsed="0.014915"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:40.072427" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-13T02:58:40.072317" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.072298" elapsed="0.000225"/>
</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-04-13T02:58:40.072674" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:40.072746" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:40.074958" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:40.030671" elapsed="0.044316"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:40.075039" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:40.075235" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:40.028680" elapsed="0.046581"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.075724" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.075406" elapsed="0.000347"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.076768" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:40.076335" elapsed="0.000462"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:40.076847" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:40.077003" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:40.075958" elapsed="0.001071"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.077423" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.077171" elapsed="0.000329"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.081195" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.077639" elapsed="0.003585"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:40.098436" elapsed="0.000507"/>
</kw>
<msg time="2026-04-13T02:58:40.098996" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.098082" elapsed="0.000969"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.097664" elapsed="0.001462"/>
</kw>
<msg time="2026-04-13T02:58:40.099168" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.089393" elapsed="0.009819"/>
</kw>
<msg time="2026-04-13T02:58:40.099312" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.089084" elapsed="0.010252"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.099720" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.099482" elapsed="0.000263"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:40.099793" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:40.099982" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:40.100038" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:40.024199" elapsed="0.075867"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.100458" level="INFO">0</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.100213" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:40.100729" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:40.100566" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.100549" elapsed="0.000249"/>
</if>
<var name="${i}">0</var>
<status status="PASS" start="2026-04-13T02:58:40.023755" elapsed="0.077066"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:40.106972" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.106609" elapsed="0.000392"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:40.107050" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:40.107200" 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-04-13T02:58:40.106194" elapsed="0.001032"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.115306" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.114948" elapsed="0.000409"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.115781" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.115503" elapsed="0.000332"/>
</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-04-13T02:58:40.129058" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:40.129210" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:40.129329" 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-04-13T02:58:40.118347" elapsed="0.011010"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.115916" elapsed="0.013502"/>
</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-04-13T02:58:40.129702" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.129461" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.115892" elapsed="0.013908"/>
</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-04-13T02:58:40.134604" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.131091" elapsed="0.003654"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.130824" elapsed="0.003972"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.130792" elapsed="0.004040"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.138397" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.135212" elapsed="0.003264"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.134915" elapsed="0.003611"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.134890" elapsed="0.003672"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.139411" 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-04-13T02:58:40.138849" elapsed="0.000604"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.139919" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.139576" elapsed="0.000428"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.140804" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.140245" elapsed="0.000609"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.140038" elapsed="0.000883"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.139548" elapsed="0.001414"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.141939" 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-04-13T02:58:40.141233" elapsed="0.000755"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.142521" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.142117" elapsed="0.000519"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.143533" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.143035" elapsed="0.000533"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.142707" elapsed="0.000909"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.142084" elapsed="0.001582"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.143868" elapsed="0.000484"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:40.144980" 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-04-13T02:58:40.144554" elapsed="0.000462"/>
</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-04-13T02:58:40.145205" elapsed="0.004715"/>
</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-04-13T02:58:40.130213" elapsed="0.019865"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:40.150307" elapsed="0.000044"/>
</return>
<status status="PASS" start="2026-04-13T02:58:40.150171" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.150145" elapsed="0.000289"/>
</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-04-13T02:58:40.150596" elapsed="0.000025"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:40.150698" elapsed="0.000018"/>
</return>
<msg time="2026-04-13T02:58:40.153569" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:40.107600" elapsed="0.046003"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:40.153688" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:40.153873" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:40.105591" elapsed="0.048317"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.154455" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.154092" elapsed="0.000395"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.155723" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:40.155215" elapsed="0.000541"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:40.155812" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:40.156010" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:40.154772" elapsed="0.001272"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.156548" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.156229" elapsed="0.000376"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.161032" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.156801" elapsed="0.004274"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:40.180093" elapsed="0.000504"/>
</kw>
<msg time="2026-04-13T02:58:40.180695" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.179731" elapsed="0.001028"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.179287" elapsed="0.001552"/>
</kw>
<msg time="2026-04-13T02:58:40.180883" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.170412" elapsed="0.010517"/>
</kw>
<msg time="2026-04-13T02:58:40.181035" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.169982" elapsed="0.011078"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.181414" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.181205" elapsed="0.000234"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:40.181488" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:40.181782" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:40.181896" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:40.101159" elapsed="0.080763"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.182356" level="INFO">1</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.182106" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:40.182622" elapsed="0.000033"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:40.182476" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.182455" elapsed="0.000252"/>
</if>
<var name="${i}">1</var>
<status status="PASS" start="2026-04-13T02:58:40.100970" elapsed="0.081762"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:40.230029" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.229665" elapsed="0.000396"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:40.230121" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T02:58:40.230288" 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-04-13T02:58:40.229283" elapsed="0.001029"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.236733" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.236434" elapsed="0.000348"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.237174" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.236923" 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-04-13T02:58:40.249930" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:40.250075" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:40.250188" 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-04-13T02:58:40.239280" elapsed="0.010934"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.237297" elapsed="0.012962"/>
</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-04-13T02:58:40.250426" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.250286" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.237275" elapsed="0.013238"/>
</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-04-13T02:58:40.256535" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.252076" elapsed="0.004529"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.251570" elapsed="0.005106"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.251527" elapsed="0.005186"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.260140" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.257115" elapsed="0.003089"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.256793" elapsed="0.003461"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.256770" elapsed="0.003519"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.261120" 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-04-13T02:58:40.260502" elapsed="0.000658"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.261566" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.261260" elapsed="0.000411"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.262329" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.261908" elapsed="0.000458"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.261706" elapsed="0.000709"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.261234" elapsed="0.001211"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.263170" 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-04-13T02:58:40.262664" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.263885" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.263377" elapsed="0.000589"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.264605" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.264196" elapsed="0.000467"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.263999" elapsed="0.000716"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.263351" elapsed="0.001393"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.264935" elapsed="0.000506"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:40.266266" 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-04-13T02:58:40.265861" elapsed="0.000442"/>
</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-04-13T02:58:40.266494" elapsed="0.003293"/>
</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-04-13T02:58:40.251036" elapsed="0.018840"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:40.270124" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-04-13T02:58:40.269974" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.269949" elapsed="0.000298"/>
</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-04-13T02:58:40.270426" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:40.270496" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:40.272689" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:40.230655" elapsed="0.042063"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:40.272770" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:40.272919" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:40.228574" elapsed="0.044370"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.273394" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.273088" elapsed="0.000338"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.274415" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:40.273988" elapsed="0.000456"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:40.274494" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:40.274666" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:40.273629" elapsed="0.001065"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.275090" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.274838" elapsed="0.000300"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.278836" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.275276" elapsed="0.003588"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:40.296314" elapsed="0.000539"/>
</kw>
<msg time="2026-04-13T02:58:40.296912" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.295963" elapsed="0.001070"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.295570" elapsed="0.001543"/>
</kw>
<msg time="2026-04-13T02:58:40.297157" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.287373" elapsed="0.009828"/>
</kw>
<msg time="2026-04-13T02:58:40.297304" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.287049" elapsed="0.010280"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.297697" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.297473" elapsed="0.000263"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:40.297789" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:40.297988" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:40.298042" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:40.183076" elapsed="0.114990"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.298459" level="INFO">2</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.298214" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:40.298742" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:40.298576" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.298556" elapsed="0.000257"/>
</if>
<var name="${i}">2</var>
<status status="PASS" start="2026-04-13T02:58:40.182882" elapsed="0.115956"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:40.304914" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.304583" elapsed="0.000357"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:40.304987" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:40.305136" 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-04-13T02:58:40.304244" elapsed="0.000916"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.311474" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.311224" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.311917" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.311672" 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-04-13T02:58:40.323718" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:40.323898" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:40.324031" 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-04-13T02:58:40.313977" elapsed="0.010089"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.312027" elapsed="0.012099"/>
</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-04-13T02:58:40.324354" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.324161" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.312008" elapsed="0.012462"/>
</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-04-13T02:58:40.329165" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.325926" elapsed="0.003309"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.325614" elapsed="0.003671"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.325587" elapsed="0.003733"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.332911" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.329781" elapsed="0.003195"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.329401" elapsed="0.003623"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.329376" elapsed="0.003682"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.333998" 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-04-13T02:58:40.333272" elapsed="0.000765"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.334516" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.334136" elapsed="0.000466"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.335288" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.334862" elapsed="0.000463"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.334636" elapsed="0.000739"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.334112" elapsed="0.001293"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.335931" 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-04-13T02:58:40.335548" elapsed="0.000410"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.336240" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.336028" elapsed="0.000270"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.336776" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.336467" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.336321" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.336010" elapsed="0.000849"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.336996" elapsed="0.000342"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:40.337796" 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-04-13T02:58:40.337487" 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-04-13T02:58:40.337959" elapsed="0.002432"/>
</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-04-13T02:58:40.325018" elapsed="0.015438"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:40.340637" elapsed="0.000043"/>
</return>
<status status="PASS" start="2026-04-13T02:58:40.340528" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.340509" 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-04-13T02:58:40.340873" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:40.340943" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:40.343194" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:40.305483" elapsed="0.037739"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:40.343274" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:40.343424" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:40.303707" elapsed="0.039743"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.343905" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.343594" elapsed="0.000338"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.344874" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:40.344459" elapsed="0.000444"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:40.344951" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:40.345107" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:40.344136" elapsed="0.001035"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.345568" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.345316" elapsed="0.000298"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.349389" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.345768" elapsed="0.003649"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:40.366597" elapsed="0.000724"/>
</kw>
<msg time="2026-04-13T02:58:40.367375" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.366250" elapsed="0.001185"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.365875" elapsed="0.001635"/>
</kw>
<msg time="2026-04-13T02:58:40.367553" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.357697" elapsed="0.009901"/>
</kw>
<msg time="2026-04-13T02:58:40.367734" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.357369" elapsed="0.010391"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.368113" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.367910" elapsed="0.000229"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:40.368186" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:40.368374" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:40.368425" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:40.299186" elapsed="0.069263"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.368857" level="INFO">3</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.368595" elapsed="0.000304"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:40.369108" elapsed="0.000016"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:40.368966" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.368948" elapsed="0.000224"/>
</if>
<var name="${i}">3</var>
<status status="PASS" start="2026-04-13T02:58:40.298990" elapsed="0.070205"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:40.375434" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.375045" elapsed="0.000417"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:40.375509" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:40.375676" 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-04-13T02:58:40.374711" elapsed="0.000992"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.382258" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.382009" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.382700" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.382442" elapsed="0.000302"/>
</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-04-13T02:58:40.396175" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:40.396347" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:40.396548" 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-04-13T02:58:40.384950" elapsed="0.011636"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.382813" elapsed="0.013863"/>
</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-04-13T02:58:40.396918" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.396716" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.382793" elapsed="0.014246"/>
</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-04-13T02:58:40.401720" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.398443" elapsed="0.003347"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.398154" elapsed="0.003685"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.398127" elapsed="0.003747"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.405317" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.402243" elapsed="0.003138"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.401953" elapsed="0.003475"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.401930" elapsed="0.003533"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.406234" 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-04-13T02:58:40.405698" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.406699" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.406371" elapsed="0.000411"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.407436" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.407018" elapsed="0.000454"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.406816" elapsed="0.000707"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.406346" elapsed="0.001207"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.408341" 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-04-13T02:58:40.407830" elapsed="0.000549"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.408709" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.408476" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.409226" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.408932" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.408791" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.408453" elapsed="0.000856"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.409446" elapsed="0.000364"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:40.410249" 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-04-13T02:58:40.409959" elapsed="0.000316"/>
</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-04-13T02:58:40.410412" elapsed="0.002419"/>
</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-04-13T02:58:40.397535" elapsed="0.015369"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:40.413089" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T02:58:40.412980" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.412960" elapsed="0.000238"/>
</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-04-13T02:58:40.413376" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:40.413469" elapsed="0.000020"/>
</return>
<msg time="2026-04-13T02:58:40.415698" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:40.376020" elapsed="0.039707"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:40.415780" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:40.416042" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:40.374157" elapsed="0.041913"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.416536" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.416228" elapsed="0.000335"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.417619" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:40.417174" elapsed="0.000497"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:40.417729" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:40.417897" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:40.416804" elapsed="0.001121"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.418333" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.418070" elapsed="0.000311"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.422085" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.418517" elapsed="0.003596"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:40.439250" elapsed="0.000550"/>
</kw>
<msg time="2026-04-13T02:58:40.439864" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.438892" elapsed="0.001037"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.438503" elapsed="0.001503"/>
</kw>
<msg time="2026-04-13T02:58:40.440050" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.430381" elapsed="0.009713"/>
</kw>
<msg time="2026-04-13T02:58:40.440196" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.430039" elapsed="0.010181"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.440606" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.440396" elapsed="0.000236"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:40.440702" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:58:40.440906" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:40.440959" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:40.369533" elapsed="0.071450"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.441378" level="INFO">4</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.441134" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:40.441669" elapsed="0.000020"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:40.441501" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.441479" elapsed="0.000261"/>
</if>
<var name="${i}">4</var>
<status status="PASS" start="2026-04-13T02:58:40.369340" elapsed="0.072425"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:40.447855" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.447536" elapsed="0.000346"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:40.447927" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:40.448072" 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-04-13T02:58:40.447208" elapsed="0.000888"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.454418" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.454167" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.454861" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.454600" elapsed="0.000305"/>
</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-04-13T02:58:40.467982" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:40.468288" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:40.468542" 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-04-13T02:58:40.456966" elapsed="0.011638"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.454976" elapsed="0.013774"/>
</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-04-13T02:58:40.469265" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.468857" elapsed="0.000586"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.454955" elapsed="0.014538"/>
</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-04-13T02:58:40.477731" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.472444" elapsed="0.005348"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.471945" elapsed="0.005889"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.471897" elapsed="0.005964"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.480379" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.478160" elapsed="0.002271"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.477925" elapsed="0.002543"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.477906" elapsed="0.002587"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.481203" 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-04-13T02:58:40.480686" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.481579" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.481330" elapsed="0.000327"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.482140" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.481833" elapsed="0.000333"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.481683" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.481306" elapsed="0.000917"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.482753" 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-04-13T02:58:40.482366" elapsed="0.000414"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.483066" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.482850" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.483585" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.483290" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.483148" elapsed="0.000669"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.482832" elapsed="0.001006"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.483982" elapsed="0.000357"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:40.484823" 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-04-13T02:58:40.484498" elapsed="0.000353"/>
</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-04-13T02:58:40.484996" elapsed="0.002456"/>
</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-04-13T02:58:40.470374" elapsed="0.017214"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:40.487797" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T02:58:40.487682" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.487660" 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-04-13T02:58:40.488033" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:40.488106" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T02:58:40.490350" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:40.448514" elapsed="0.041865"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:40.490432" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:40.490586" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:40.446674" elapsed="0.043938"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.491084" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.490776" elapsed="0.000335"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.492152" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:40.491721" elapsed="0.000459"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:40.492229" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:40.492389" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:40.491327" elapsed="0.001088"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.492840" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.492558" elapsed="0.000329"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.496773" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.493055" elapsed="0.003749"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:40.514272" elapsed="0.000574"/>
</kw>
<msg time="2026-04-13T02:58:40.514915" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.513901" elapsed="0.001080"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.513456" elapsed="0.001605"/>
</kw>
<msg time="2026-04-13T02:58:40.515106" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.505282" elapsed="0.009868"/>
</kw>
<msg time="2026-04-13T02:58:40.515275" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.504895" elapsed="0.010411"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.515758" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.515501" elapsed="0.000285"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:40.515839" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:58:40.516041" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:40.516167" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:40.442119" elapsed="0.074076"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.516664" level="INFO">5</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.516350" elapsed="0.000363"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:40.516949" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:40.516792" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.516771" elapsed="0.000248"/>
</if>
<var name="${i}">5</var>
<status status="PASS" start="2026-04-13T02:58:40.441923" elapsed="0.075121"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:40.523226" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.522897" elapsed="0.000358"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:40.523306" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:58:40.523471" 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-04-13T02:58:40.522521" elapsed="0.000976"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.530002" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.529657" elapsed="0.000397"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.530450" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.530202" elapsed="0.000293"/>
</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-04-13T02:58:40.543087" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:40.543252" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:40.543376" 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-04-13T02:58:40.532542" elapsed="0.010862"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.530571" elapsed="0.012885"/>
</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-04-13T02:58:40.543710" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.543488" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.530549" elapsed="0.013253"/>
</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-04-13T02:58:40.547392" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.544915" elapsed="0.002554"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.544684" elapsed="0.002836"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.544662" elapsed="0.002896"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.551411" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.548037" elapsed="0.003454"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.547666" elapsed="0.003881"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.547618" elapsed="0.003968"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.552441" 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-04-13T02:58:40.551861" elapsed="0.000618"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.552918" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.552581" elapsed="0.000418"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.553707" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.553258" elapsed="0.000487"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.553033" elapsed="0.000762"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.552554" elapsed="0.001270"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.554600" 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-04-13T02:58:40.554027" elapsed="0.000632"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.555181" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.554862" elapsed="0.000404"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.555821" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.555501" elapsed="0.000347"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.555310" elapsed="0.000574"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.554833" elapsed="0.001072"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.556060" elapsed="0.000356"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:40.556905" 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-04-13T02:58:40.556571" 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-04-13T02:58:40.557076" elapsed="0.002598"/>
</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-04-13T02:58:40.544193" elapsed="0.015557"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:40.559956" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-13T02:58:40.559836" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.559812" 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-04-13T02:58:40.560208" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:40.560280" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:40.562637" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:40.523848" elapsed="0.039028"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:40.562952" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:40.563118" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:40.521937" elapsed="0.041207"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.563661" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.563299" elapsed="0.000391"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.564755" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:40.564305" elapsed="0.000478"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:40.564832" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:40.564988" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:40.563927" elapsed="0.001087"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.565420" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.565161" elapsed="0.000306"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.569237" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.565604" elapsed="0.003661"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:40.587660" elapsed="0.000531"/>
</kw>
<msg time="2026-04-13T02:58:40.588262" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.587224" elapsed="0.001184"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.586688" elapsed="0.001807"/>
</kw>
<msg time="2026-04-13T02:58:40.588540" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.578408" elapsed="0.010177"/>
</kw>
<msg time="2026-04-13T02:58:40.588739" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.577954" elapsed="0.010810"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.589134" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.588914" elapsed="0.000252"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:40.589227" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:40.589435" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:40.589488" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:40.517405" elapsed="0.072108"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.589935" level="INFO">6</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.589682" elapsed="0.000297"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:40.590218" elapsed="0.000023"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:40.590055" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.590034" elapsed="0.000263"/>
</if>
<var name="${i}">6</var>
<status status="PASS" start="2026-04-13T02:58:40.517195" elapsed="0.073127"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:40.596566" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.596232" elapsed="0.000362"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:40.596662" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:58:40.596823" 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-04-13T02:58:40.595892" elapsed="0.000956"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.603173" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.602913" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.603669" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.603398" elapsed="0.000317"/>
</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-04-13T02:58:40.618383" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:40.618749" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:40.619057" 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-04-13T02:58:40.605786" elapsed="0.013348"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.603791" elapsed="0.015463"/>
</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-04-13T02:58:40.619819" elapsed="0.000087"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.619323" elapsed="0.000696"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.603769" elapsed="0.016303"/>
</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-04-13T02:58:40.626851" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.622594" elapsed="0.004337"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.622083" elapsed="0.004902"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.622035" elapsed="0.004988"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.630903" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.627537" elapsed="0.003439"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.627113" elapsed="0.003917"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.627086" elapsed="0.003982"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.631983" 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-04-13T02:58:40.631323" elapsed="0.000700"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.632445" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.632132" elapsed="0.000371"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.632993" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.632691" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.632527" elapsed="0.000527"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.632103" elapsed="0.000973"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.633580" 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-04-13T02:58:40.633218" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.633911" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.633695" elapsed="0.000273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.634424" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.634133" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.633991" elapsed="0.000493"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.633676" elapsed="0.000829"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.634669" elapsed="0.000348"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:40.635474" 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-04-13T02:58:40.635169" elapsed="0.000330"/>
</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-04-13T02:58:40.635655" elapsed="0.002555"/>
</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-04-13T02:58:40.620970" elapsed="0.017311"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:40.638471" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-13T02:58:40.638358" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.638338" elapsed="0.000233"/>
</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-04-13T02:58:40.638729" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:40.638803" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:40.641118" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:40.597174" elapsed="0.043974"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:40.641204" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:40.641362" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:40.595302" elapsed="0.046086"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.641882" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.641542" elapsed="0.000367"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.642912" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:40.642481" elapsed="0.000459"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:40.642987" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:40.643145" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:40.642128" elapsed="0.001111"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.643661" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.643387" elapsed="0.000323"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.647466" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.643846" elapsed="0.003649"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:40.665510" elapsed="0.000590"/>
</kw>
<msg time="2026-04-13T02:58:40.666175" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.665101" elapsed="0.001142"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.664572" elapsed="0.001752"/>
</kw>
<msg time="2026-04-13T02:58:40.666370" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.655870" elapsed="0.010548"/>
</kw>
<msg time="2026-04-13T02:58:40.666559" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.655486" elapsed="0.011102"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.667023" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.666799" elapsed="0.000256"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:40.667117" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:40.667325" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:40.667379" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:40.590725" elapsed="0.076679"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.667843" level="INFO">7</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.667556" elapsed="0.000332"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:40.668131" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:40.667970" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.667948" elapsed="0.000251"/>
</if>
<var name="${i}">7</var>
<status status="PASS" start="2026-04-13T02:58:40.590488" elapsed="0.077735"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:40.676286" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.675919" elapsed="0.000401"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:40.676380" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T02:58:40.676607" 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-04-13T02:58:40.675528" elapsed="0.001108"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.683481" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.683174" elapsed="0.000360"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.683994" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.683733" elapsed="0.000307"/>
</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-04-13T02:58:40.697163" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:40.697332" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:40.697641" 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-04-13T02:58:40.686149" elapsed="0.011592"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.684126" elapsed="0.013728"/>
</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-04-13T02:58:40.698386" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.697972" elapsed="0.000574"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.684099" elapsed="0.014498"/>
</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-04-13T02:58:40.706038" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.701200" elapsed="0.004892"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.700576" elapsed="0.005553"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.700528" elapsed="0.005627"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.708638" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.706431" elapsed="0.002270"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.706215" elapsed="0.002522"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.706198" elapsed="0.002565"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.709388" 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-04-13T02:58:40.708930" elapsed="0.000486"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.709733" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.709491" elapsed="0.000302"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.710307" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.709989" elapsed="0.000345"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.709819" elapsed="0.000552"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.709472" elapsed="0.000920"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.710922" 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-04-13T02:58:40.710535" elapsed="0.000414"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.711237" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.711020" elapsed="0.000273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.711770" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.711457" elapsed="0.000341"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.711316" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.711002" elapsed="0.000851"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.711993" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:40.712808" 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-04-13T02:58:40.712488" elapsed="0.000346"/>
</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-04-13T02:58:40.712973" elapsed="0.002557"/>
</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-04-13T02:58:40.699490" elapsed="0.016112"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:40.715810" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-13T02:58:40.715696" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.715675" elapsed="0.000233"/>
</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-04-13T02:58:40.716048" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:40.716121" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:40.718392" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:40.676998" elapsed="0.041423"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:40.718476" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:40.718729" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:40.674850" elapsed="0.043907"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.719335" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.718912" elapsed="0.000452"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.720493" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:40.720015" elapsed="0.000506"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:40.720572" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:40.720755" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:40.719591" elapsed="0.001191"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.721227" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.720930" elapsed="0.000346"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.725117" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.721469" elapsed="0.003677"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:40.744155" elapsed="0.000677"/>
</kw>
<msg time="2026-04-13T02:58:40.744918" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.743717" elapsed="0.001277"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.743235" elapsed="0.001839"/>
</kw>
<msg time="2026-04-13T02:58:40.745119" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.733616" elapsed="0.011551"/>
</kw>
<msg time="2026-04-13T02:58:40.745285" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.733173" elapsed="0.012137"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.745787" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.745486" elapsed="0.000354"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:40.745912" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T02:58:40.746155" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:40.746212" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:40.668653" elapsed="0.077584"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.746725" level="INFO">8</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.746409" elapsed="0.000367"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:40.747170" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:40.746993" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.746960" elapsed="0.000282"/>
</if>
<var name="${i}">8</var>
<status status="PASS" start="2026-04-13T02:58:40.668383" elapsed="0.078885"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:40.753721" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.753391" elapsed="0.000358"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:40.753797" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:40.753968" 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-04-13T02:58:40.753041" elapsed="0.000958"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.760533" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.760276" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.760996" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.760739" elapsed="0.000301"/>
</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-04-13T02:58:40.774463" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:40.774688" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:40.774878" 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-04-13T02:58:40.763124" elapsed="0.011793"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.761112" elapsed="0.013866"/>
</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-04-13T02:58:40.775221" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.775017" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.761091" elapsed="0.014250"/>
</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-04-13T02:58:40.780152" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.776816" elapsed="0.003405"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.776496" elapsed="0.003773"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.776470" elapsed="0.003834"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.783848" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.780698" elapsed="0.003217"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.780381" elapsed="0.003582"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.780359" elapsed="0.003637"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.784782" 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-04-13T02:58:40.784215" elapsed="0.000607"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.785299" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.784939" elapsed="0.000460"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.786099" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.785671" elapsed="0.000466"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.785438" elapsed="0.000749"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.784902" elapsed="0.001316"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.787022" 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-04-13T02:58:40.786419" elapsed="0.000641"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.787484" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.787158" elapsed="0.000426"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.788073" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.787774" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.787609" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.787132" elapsed="0.001024"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.788295" elapsed="0.000367"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:40.789115" 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-04-13T02:58:40.788815" elapsed="0.000326"/>
</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-04-13T02:58:40.789291" elapsed="0.002422"/>
</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-04-13T02:58:40.775897" elapsed="0.015933"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:40.792016" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-13T02:58:40.791903" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.791884" elapsed="0.000250"/>
</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-04-13T02:58:40.792313" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:40.792408" elapsed="0.000020"/>
</return>
<msg time="2026-04-13T02:58:40.794755" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:40.754423" elapsed="0.040364"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:40.794840" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:40.794995" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:40.752466" elapsed="0.042555"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.795462" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.795168" elapsed="0.000321"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.796478" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:40.796072" elapsed="0.000435"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:40.796557" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:40.796738" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:40.795713" elapsed="0.001052"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.797164" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.796910" elapsed="0.000309"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.801994" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.797361" elapsed="0.004669"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:40.825779" elapsed="0.000668"/>
</kw>
<msg time="2026-04-13T02:58:40.826532" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.825241" elapsed="0.001371"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.824613" elapsed="0.002150"/>
</kw>
<msg time="2026-04-13T02:58:40.826822" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.813401" elapsed="0.013482"/>
</kw>
<msg time="2026-04-13T02:58:40.827027" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.812869" elapsed="0.014190"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.827569" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.827256" elapsed="0.000346"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:40.827693" elapsed="0.000044"/>
</return>
<msg time="2026-04-13T02:58:40.827946" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:40.828104" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:40.747666" elapsed="0.080473"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.828674" level="INFO">9</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.828331" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:40.829025" elapsed="0.000024"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:40.828832" elapsed="0.000249"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.828805" elapsed="0.000305"/>
</if>
<var name="${i}">9</var>
<status status="PASS" start="2026-04-13T02:58:40.747431" elapsed="0.081709"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:40.837144" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.836730" elapsed="0.000449"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:40.837247" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T02:58:40.837452" 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-04-13T02:58:40.836278" elapsed="0.001210"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.844406" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.844121" elapsed="0.000347"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.844992" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.844725" elapsed="0.000312"/>
</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-04-13T02:58:40.858429" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:40.858710" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:40.858903" 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-04-13T02:58:40.847184" elapsed="0.011761"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.845119" elapsed="0.013907"/>
</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-04-13T02:58:40.859357" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.859074" elapsed="0.000384"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.845095" elapsed="0.014395"/>
</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-04-13T02:58:40.867527" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.861962" elapsed="0.005737"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.861246" elapsed="0.006547"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.861199" elapsed="0.006657"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.871034" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.868544" elapsed="0.002553"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.868101" elapsed="0.003046"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.867963" elapsed="0.003216"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.871944" 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-04-13T02:58:40.871396" elapsed="0.000583"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.872376" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.872121" elapsed="0.000320"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.872963" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.872618" elapsed="0.000371"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.872469" elapsed="0.000557"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.872055" elapsed="0.000992"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.873583" 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-04-13T02:58:40.873195" elapsed="0.000414"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.874017" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.873787" elapsed="0.000289"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.874550" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.874247" elapsed="0.000330"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.874101" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.873766" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.874807" elapsed="0.000357"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:40.875620" 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-04-13T02:58:40.875317" 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-04-13T02:58:40.875809" elapsed="0.002784"/>
</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-04-13T02:58:40.860251" elapsed="0.018451"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:40.878928" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-13T02:58:40.878803" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.878772" 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-04-13T02:58:40.879201" elapsed="0.000025"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:40.879275" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T02:58:40.881833" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:40.837938" elapsed="0.043934"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:40.881945" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T02:58:40.882128" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:40.835549" elapsed="0.046606"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.882745" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.882348" elapsed="0.000425"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.883846" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:40.883381" elapsed="0.000494"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:40.883927" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:40.884097" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:40.883001" elapsed="0.001123"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.884587" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.884271" elapsed="0.000369"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.888690" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.884796" elapsed="0.003936"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:40.906922" elapsed="0.000528"/>
</kw>
<msg time="2026-04-13T02:58:40.907520" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.906492" elapsed="0.001203"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.905958" elapsed="0.001822"/>
</kw>
<msg time="2026-04-13T02:58:40.907825" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.897418" elapsed="0.010453"/>
</kw>
<msg time="2026-04-13T02:58:40.907982" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.896932" elapsed="0.011076"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.908369" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.908156" elapsed="0.000238"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:40.908451" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:40.908672" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:40.908728" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:40.829617" elapsed="0.079167"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.909185" level="INFO">10</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.908937" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:40.909457" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:40.909306" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.909285" elapsed="0.000240"/>
</if>
<var name="${i}">10</var>
<status status="PASS" start="2026-04-13T02:58:40.829337" elapsed="0.080213"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:40.915775" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.915418" elapsed="0.000389"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:40.915864" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:58:40.916022" 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-04-13T02:58:40.915074" elapsed="0.000973"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.922671" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.922328" elapsed="0.000401"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.923121" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.922877" 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-04-13T02:58:40.936484" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:40.936832" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:40.937084" 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-04-13T02:58:40.925307" elapsed="0.011838"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.923247" elapsed="0.014065"/>
</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-04-13T02:58:40.937792" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.937381" elapsed="0.000556"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.923223" elapsed="0.014762"/>
</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-04-13T02:58:40.944902" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.940329" elapsed="0.004658"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.939857" elapsed="0.005190"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.939814" elapsed="0.005275"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.949051" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.945702" elapsed="0.003428"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.945190" elapsed="0.003999"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.945158" elapsed="0.004070"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.950212" 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-04-13T02:58:40.949549" elapsed="0.000704"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.950621" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.950364" elapsed="0.000334"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.951176" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.950872" elapsed="0.000330"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.950723" elapsed="0.000515"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.950335" elapsed="0.000924"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.951792" 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-04-13T02:58:40.951403" elapsed="0.000416"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:40.952107" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:40.951891" elapsed="0.000273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.952623" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.952330" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:40.952189" elapsed="0.000516"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.951873" elapsed="0.000853"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.952895" elapsed="0.000348"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:40.953934" 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-04-13T02:58:40.953395" elapsed="0.000566"/>
</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-04-13T02:58:40.954101" elapsed="0.002509"/>
</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-04-13T02:58:40.938841" elapsed="0.018032"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:40.957083" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-13T02:58:40.956962" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.956938" 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-04-13T02:58:40.957354" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:40.957427" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:40.959714" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:40.916381" elapsed="0.043363"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:40.959796" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:40.959951" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:40.914453" elapsed="0.045525"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.960458" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.960127" elapsed="0.000358"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.961498" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:40.961082" elapsed="0.000445"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:40.961574" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:40.961769" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:40.960725" elapsed="0.001143"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.962280" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.962018" elapsed="0.000309"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.966157" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.962464" elapsed="0.003722"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:40.984828" elapsed="0.000531"/>
</kw>
<msg time="2026-04-13T02:58:40.985431" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.984397" elapsed="0.001099"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.983874" elapsed="0.001701"/>
</kw>
<msg time="2026-04-13T02:58:40.985620" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:40.975316" elapsed="0.010379"/>
</kw>
<msg time="2026-04-13T02:58:40.985809" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:40.974598" elapsed="0.011237"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:40.986259" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:40.985982" elapsed="0.000306"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:40.986340" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:40.986543" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:40.986597" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:40.909941" elapsed="0.076681"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:40.987057" level="INFO">11</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:40.986794" elapsed="0.000319"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:40.987392" elapsed="0.000023"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:40.987193" elapsed="0.000258"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:40.987172" elapsed="0.000308"/>
</if>
<var name="${i}">11</var>
<status status="PASS" start="2026-04-13T02:58:40.909726" elapsed="0.077784"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:40.993972" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:40.993600" elapsed="0.000405"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:40.994063" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T02:58:40.994225" 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-04-13T02:58:40.993250" elapsed="0.001001"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.000836" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.000491" elapsed="0.000401"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.001283" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.001039" 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-04-13T02:58:41.013882" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:41.014068" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:41.014292" 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-04-13T02:58:41.003442" elapsed="0.010880"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.001411" elapsed="0.012969"/>
</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-04-13T02:58:41.014630" elapsed="0.000119"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.014417" elapsed="0.000387"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.001386" elapsed="0.013441"/>
</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-04-13T02:58:41.022316" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.016684" elapsed="0.005759"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.016179" elapsed="0.006351"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.016134" elapsed="0.006458"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.025672" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.023377" elapsed="0.002345"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.022777" elapsed="0.002981"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.022733" elapsed="0.003050"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.026381" 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-04-13T02:58:41.025958" elapsed="0.000450"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.026722" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.026481" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.027296" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.026977" elapsed="0.000346"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.026806" elapsed="0.000554"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.026463" elapsed="0.000918"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.027934" 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-04-13T02:58:41.027529" elapsed="0.000433"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.028249" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.028032" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.028786" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.028474" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.028331" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.028014" elapsed="0.000856"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.029009" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:41.029824" 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-04-13T02:58:41.029506" 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-04-13T02:58:41.029999" elapsed="0.002422"/>
</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-04-13T02:58:41.015281" elapsed="0.017215"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:41.032709" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-13T02:58:41.032570" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.032551" elapsed="0.000255"/>
</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-04-13T02:58:41.032958" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:41.033029" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:41.035262" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:40.994613" elapsed="0.040678"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:41.035345" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.035566" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:40.992601" elapsed="0.042991"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.036050" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.035757" elapsed="0.000321"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.037051" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:41.036637" elapsed="0.000443"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:41.037128" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.037286" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:41.036294" elapsed="0.001018"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.037728" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.037458" elapsed="0.000317"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.041449" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.037911" elapsed="0.003567"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:41.058675" elapsed="0.000496"/>
</kw>
<msg time="2026-04-13T02:58:41.059225" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.058295" elapsed="0.000987"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.057921" elapsed="0.001435"/>
</kw>
<msg time="2026-04-13T02:58:41.059400" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.049867" elapsed="0.009580"/>
</kw>
<msg time="2026-04-13T02:58:41.059569" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.049537" elapsed="0.010056"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.059975" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.059770" elapsed="0.000231"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:41.060048" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:41.060237" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:41.060288" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:40.987940" elapsed="0.072373"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.060723" level="INFO">12</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.060462" elapsed="0.000306"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:41.060977" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:41.060834" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.060816" elapsed="0.000226"/>
</if>
<var name="${i}">12</var>
<status status="PASS" start="2026-04-13T02:58:40.987721" elapsed="0.073345"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:41.067169" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.066870" elapsed="0.000325"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:41.067241" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.067387" 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-04-13T02:58:41.066523" elapsed="0.000888"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.073943" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.073504" elapsed="0.000494"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.074397" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.074150" elapsed="0.000294"/>
</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-04-13T02:58:41.089355" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:41.089618" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:41.089883" 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-04-13T02:58:41.076696" elapsed="0.013245"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.074513" elapsed="0.015522"/>
</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-04-13T02:58:41.090404" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.090092" elapsed="0.000452"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.074494" elapsed="0.016098"/>
</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-04-13T02:58:41.097162" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.092914" elapsed="0.004296"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.092418" elapsed="0.004826"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.092375" elapsed="0.004893"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.099703" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.097528" elapsed="0.002222"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.097323" elapsed="0.002461"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.097307" elapsed="0.002501"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.100351" 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-04-13T02:58:41.099955" elapsed="0.000424"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.100682" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.100449" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.101207" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.100908" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.100765" elapsed="0.000504"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.100431" elapsed="0.000859"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.101811" 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-04-13T02:58:41.101431" elapsed="0.000407"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.102119" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.101906" elapsed="0.000270"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.102636" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.102338" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.102199" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.101889" elapsed="0.000843"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.102866" elapsed="0.000338"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:41.103631" 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-04-13T02:58:41.103351" 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-04-13T02:58:41.103809" elapsed="0.002356"/>
</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-04-13T02:58:41.091386" elapsed="0.014877"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:41.106440" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-13T02:58:41.106334" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.106315" 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-04-13T02:58:41.106672" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:41.106743" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:41.109006" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:41.067797" elapsed="0.041238"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:41.109088" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.109239" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:41.065993" elapsed="0.043271"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.109718" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.109407" elapsed="0.000339"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.110665" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:41.110261" elapsed="0.000434"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:41.110743" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:41.110898" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:41.109943" elapsed="0.000981"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.111312" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.111064" elapsed="0.000294"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.115669" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.111492" elapsed="0.004217"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:41.134305" elapsed="0.000490"/>
</kw>
<msg time="2026-04-13T02:58:41.134845" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.133962" elapsed="0.000934"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.133577" elapsed="0.001392"/>
</kw>
<msg time="2026-04-13T02:58:41.135011" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.125548" elapsed="0.009507"/>
</kw>
<msg time="2026-04-13T02:58:41.135155" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.125240" elapsed="0.009939"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.135519" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.135320" elapsed="0.000223"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:41.135589" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.135831" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:41.135882" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:41.061403" elapsed="0.074503"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.136292" level="INFO">13</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.136052" elapsed="0.000283"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:41.136537" elapsed="0.000016"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:41.136399" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.136382" elapsed="0.000218"/>
</if>
<var name="${i}">13</var>
<status status="PASS" start="2026-04-13T02:58:41.061213" elapsed="0.075414"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:41.143766" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.143453" elapsed="0.000340"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:41.143838" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.143983" 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-04-13T02:58:41.143124" elapsed="0.000883"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.150344" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.150095" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.150786" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.150526" elapsed="0.000303"/>
</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-04-13T02:58:41.164040" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:41.164320" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:41.164579" 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-04-13T02:58:41.152830" elapsed="0.012076"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.150898" elapsed="0.014129"/>
</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-04-13T02:58:41.165522" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.165093" elapsed="0.000620"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.150878" elapsed="0.014888"/>
</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-04-13T02:58:41.174086" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.168293" elapsed="0.005910"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.167788" elapsed="0.006498"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.167739" elapsed="0.006607"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.177086" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.174696" elapsed="0.002443"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.174467" elapsed="0.002708"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.174442" elapsed="0.002759"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.177819" 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-04-13T02:58:41.177360" elapsed="0.000487"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.178140" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.177918" elapsed="0.000281"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.178716" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.178368" elapsed="0.000375"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.178223" elapsed="0.000558"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.177900" elapsed="0.000903"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.179337" 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-04-13T02:58:41.178947" elapsed="0.000417"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.179735" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.179495" elapsed="0.000298"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.180256" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.179959" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.179817" elapsed="0.000500"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.179475" elapsed="0.000864"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.180480" elapsed="0.000362"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:41.181283" 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-04-13T02:58:41.180993" elapsed="0.000316"/>
</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-04-13T02:58:41.181449" elapsed="0.002389"/>
</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-04-13T02:58:41.166609" elapsed="0.017295"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:41.184084" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-13T02:58:41.183976" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.183957" 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-04-13T02:58:41.184312" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:41.184384" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:41.186826" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:41.144316" elapsed="0.042538"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:41.186907" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:41.187058" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:41.142591" elapsed="0.044493"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.187512" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.187227" elapsed="0.000312"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.188462" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:41.188073" elapsed="0.000417"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:41.188539" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.188751" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:41.187756" elapsed="0.001024"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.189203" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.188949" elapsed="0.000300"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.193065" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.189385" elapsed="0.003708"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:41.210174" elapsed="0.000505"/>
</kw>
<msg time="2026-04-13T02:58:41.210780" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.209816" elapsed="0.001021"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.209427" elapsed="0.001487"/>
</kw>
<msg time="2026-04-13T02:58:41.210957" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.201324" elapsed="0.009677"/>
</kw>
<msg time="2026-04-13T02:58:41.211103" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.201011" elapsed="0.010116"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.211467" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.211268" elapsed="0.000225"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:41.211540" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.211746" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:41.211799" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:41.137000" elapsed="0.074823"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.212250" level="INFO">14</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.211970" elapsed="0.000325"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:41.212508" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:41.212364" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.212346" elapsed="0.000228"/>
</if>
<var name="${i}">14</var>
<status status="PASS" start="2026-04-13T02:58:41.136776" elapsed="0.075822"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:41.218748" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.218431" elapsed="0.000344"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:41.218822" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.218969" 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-04-13T02:58:41.218064" elapsed="0.000929"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.225268" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.225023" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.225710" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.225450" elapsed="0.000304"/>
</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-04-13T02:58:41.238135" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:41.238264" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:41.238361" 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-04-13T02:58:41.227771" elapsed="0.010615"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.225822" 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-04-13T02:58:41.238607" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.238458" elapsed="0.000258"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.225803" elapsed="0.012936"/>
</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-04-13T02:58:41.246120" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.240121" elapsed="0.006114"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.239589" elapsed="0.006728"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.239544" elapsed="0.006938"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.249610" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.247326" elapsed="0.002346"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.246789" elapsed="0.002919"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.246675" elapsed="0.003057"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.250276" 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-04-13T02:58:41.249889" elapsed="0.000414"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.250597" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.250373" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.251185" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.250882" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.250697" elapsed="0.000550"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.250355" elapsed="0.000914"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.251792" 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-04-13T02:58:41.251409" elapsed="0.000410"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.252106" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.251890" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.252628" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.252330" elapsed="0.000344"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.252189" elapsed="0.000521"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.251872" elapsed="0.000862"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.252875" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:41.253682" 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-04-13T02:58:41.253373" 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-04-13T02:58:41.253852" elapsed="0.002374"/>
</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-04-13T02:58:41.239085" elapsed="0.017205"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:41.256466" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-13T02:58:41.256360" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.256341" elapsed="0.000213"/>
</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-04-13T02:58:41.256702" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:41.256774" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:41.258971" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:41.219307" elapsed="0.039694"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:41.259053" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.259206" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:41.217519" elapsed="0.041713"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.259685" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.259376" elapsed="0.000337"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.260652" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:41.260239" elapsed="0.000445"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:41.260733" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.260933" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:41.259917" elapsed="0.001042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.261406" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.261103" elapsed="0.000351"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.265255" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.261593" elapsed="0.003691"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:41.282670" elapsed="0.000492"/>
</kw>
<msg time="2026-04-13T02:58:41.283217" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.282300" elapsed="0.000973"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.281921" elapsed="0.001517"/>
</kw>
<msg time="2026-04-13T02:58:41.283485" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.273572" elapsed="0.009959"/>
</kw>
<msg time="2026-04-13T02:58:41.283635" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.273260" elapsed="0.010428"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.284037" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.283833" elapsed="0.000229"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:41.284108" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:41.284297" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:41.284347" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:41.212951" elapsed="0.071420"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.284791" level="INFO">15</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.284525" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:41.285045" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:41.284904" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.284885" elapsed="0.000225"/>
</if>
<var name="${i}">15</var>
<status status="PASS" start="2026-04-13T02:58:41.212760" elapsed="0.072374"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:41.291074" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.290773" elapsed="0.000327"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:41.291146" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:41.291297" 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-04-13T02:58:41.290420" elapsed="0.000901"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.297780" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.297514" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.298203" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.297962" elapsed="0.000283"/>
</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-04-13T02:58:41.309213" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:41.309403" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:41.309679" 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-04-13T02:58:41.300277" elapsed="0.009451"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.298311" elapsed="0.011485"/>
</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-04-13T02:58:41.310032" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.309834" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.298292" elapsed="0.011859"/>
</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-04-13T02:58:41.314976" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.311546" elapsed="0.003499"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.311254" elapsed="0.003850"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.311227" elapsed="0.003915"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.318602" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.315514" elapsed="0.003177"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.315221" elapsed="0.003520"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.315198" elapsed="0.003577"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.319539" 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-04-13T02:58:41.318985" elapsed="0.000591"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.320068" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.319709" elapsed="0.000443"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.320747" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.320388" elapsed="0.000385"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.320186" elapsed="0.000623"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.319681" elapsed="0.001149"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.321334" 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-04-13T02:58:41.320972" elapsed="0.000390"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.321664" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.321431" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.322182" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.321890" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.321748" elapsed="0.000496"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.321413" elapsed="0.000851"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.322400" elapsed="0.000359"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:41.323203" 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-04-13T02:58:41.322909" elapsed="0.000321"/>
</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-04-13T02:58:41.323369" elapsed="0.002373"/>
</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-04-13T02:58:41.310631" elapsed="0.015176"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:41.325984" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-13T02:58:41.325877" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.325858" elapsed="0.000211"/>
</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-04-13T02:58:41.326201" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:41.326271" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:41.328546" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:41.291689" elapsed="0.036885"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:41.328627" elapsed="0.000046"/>
</return>
<msg time="2026-04-13T02:58:41.328837" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:41.289895" elapsed="0.038970"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.329302" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.329010" elapsed="0.000319"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.330269" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:41.329874" elapsed="0.000424"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:41.330346" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:41.330501" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:41.329534" elapsed="0.000993"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.330941" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.330686" elapsed="0.000302"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.334716" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.331145" elapsed="0.003600"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:41.352182" elapsed="0.000599"/>
</kw>
<msg time="2026-04-13T02:58:41.352834" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.351833" elapsed="0.001053"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.351433" elapsed="0.001527"/>
</kw>
<msg time="2026-04-13T02:58:41.353003" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.343234" elapsed="0.009812"/>
</kw>
<msg time="2026-04-13T02:58:41.353146" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.342908" elapsed="0.010262"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.353512" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.353313" elapsed="0.000224"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:41.353583" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.353793" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:41.353843" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:41.285468" elapsed="0.068399"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.354253" level="INFO">16</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.354012" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:41.354502" elapsed="0.000016"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:41.354361" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.354343" elapsed="0.000222"/>
</if>
<var name="${i}">16</var>
<status status="PASS" start="2026-04-13T02:58:41.285277" elapsed="0.069311"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:41.360432" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.360137" elapsed="0.000323"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:41.360508" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:41.360702" 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-04-13T02:58:41.359812" elapsed="0.000915"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.367004" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.366756" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.367428" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.367189" elapsed="0.000286"/>
</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-04-13T02:58:41.377556" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:41.377690" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:41.377786" 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-04-13T02:58:41.369481" elapsed="0.008330"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.367541" elapsed="0.010312"/>
</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-04-13T02:58:41.378016" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.377878" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.367522" elapsed="0.010577"/>
</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-04-13T02:58:41.381389" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.379078" elapsed="0.002359"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.378872" elapsed="0.002600"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.378853" elapsed="0.002644"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.383937" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.381776" elapsed="0.002206"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.381552" elapsed="0.002464"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.381536" elapsed="0.002504"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.384548" 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-04-13T02:58:41.384183" elapsed="0.000392"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.384885" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.384666" elapsed="0.000366"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.385507" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.385209" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.385060" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.384630" elapsed="0.000959"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.386110" 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-04-13T02:58:41.385748" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.386416" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.386204" elapsed="0.000269"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.386942" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.386652" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.386497" elapsed="0.000505"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.386186" elapsed="0.000838"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.387156" elapsed="0.000337"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:41.387927" 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-04-13T02:58:41.387655" 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-04-13T02:58:41.388090" elapsed="0.002344"/>
</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-04-13T02:58:41.378433" elapsed="0.012098"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:41.390725" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-13T02:58:41.390601" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.390582" 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-04-13T02:58:41.390940" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:41.391010" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:41.393215" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:41.361081" elapsed="0.032162"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:41.393295" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.393446" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:41.359277" elapsed="0.034194"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.393916" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.393614" elapsed="0.000329"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.394861" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:41.394456" elapsed="0.000435"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:41.394938" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.395095" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:41.394139" elapsed="0.000982"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.395511" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.395262" elapsed="0.000294"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.399216" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.395714" elapsed="0.003529"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:41.416449" elapsed="0.000471"/>
</kw>
<msg time="2026-04-13T02:58:41.416970" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.416107" elapsed="0.000912"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.415738" elapsed="0.001356"/>
</kw>
<msg time="2026-04-13T02:58:41.417136" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.407458" elapsed="0.009728"/>
</kw>
<msg time="2026-04-13T02:58:41.417287" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.407151" elapsed="0.010160"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.417723" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.417484" elapsed="0.000264"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:41.417795" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.418016" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:41.418067" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:41.354932" elapsed="0.063160"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.418479" level="INFO">17</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.418237" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:41.418745" elapsed="0.000015"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:41.418587" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.418569" elapsed="0.000239"/>
</if>
<var name="${i}">17</var>
<status status="PASS" start="2026-04-13T02:58:41.354744" elapsed="0.064087"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:41.424685" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.424365" elapsed="0.000348"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:41.424759" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.424906" 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-04-13T02:58:41.424039" elapsed="0.000891"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.431215" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.430966" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.431666" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.431404" elapsed="0.000305"/>
</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-04-13T02:58:41.443908" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:41.444157" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:41.444365" 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-04-13T02:58:41.433756" elapsed="0.010665"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.431776" elapsed="0.012740"/>
</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-04-13T02:58:41.444921" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.444572" elapsed="0.000493"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.431758" 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-04-13T02:58:41.451857" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.447379" elapsed="0.004546"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.446920" elapsed="0.005051"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.446877" elapsed="0.005128"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.455401" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.452369" elapsed="0.003095"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.452083" elapsed="0.003428"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.452059" elapsed="0.003486"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.456284" 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-04-13T02:58:41.455767" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.456737" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.456416" elapsed="0.000403"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.457490" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.457058" elapsed="0.000468"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.456852" elapsed="0.000722"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.456391" elapsed="0.001213"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.458367" 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-04-13T02:58:41.457824" elapsed="0.000580"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.458764" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.458526" elapsed="0.000296"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.459387" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.459041" elapsed="0.000376"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.458894" elapsed="0.000564"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.458507" elapsed="0.000975"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.459619" elapsed="0.000361"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:41.460402" 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-04-13T02:58:41.460130" 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-04-13T02:58:41.460566" elapsed="0.002416"/>
</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-04-13T02:58:41.445891" elapsed="0.017156"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:41.463266" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-13T02:58:41.463116" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.463097" elapsed="0.000254"/>
</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-04-13T02:58:41.463482" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:41.463552" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:41.465895" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:41.425238" elapsed="0.040685"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:41.465975" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.466137" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:41.423503" elapsed="0.042661"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.466667" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.466351" elapsed="0.000345"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.467743" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:41.467339" elapsed="0.000433"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:41.467820" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.467975" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:41.467023" elapsed="0.000978"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.468451" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.468143" elapsed="0.000359"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.472259" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.468657" elapsed="0.003630"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:41.489365" elapsed="0.000511"/>
</kw>
<msg time="2026-04-13T02:58:41.489962" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.489022" elapsed="0.000993"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.488635" elapsed="0.001455"/>
</kw>
<msg time="2026-04-13T02:58:41.490133" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.480518" elapsed="0.009658"/>
</kw>
<msg time="2026-04-13T02:58:41.490278" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.480205" elapsed="0.010097"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.490739" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.490445" elapsed="0.000320"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:41.490813" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.490997" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:41.491048" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:41.419150" elapsed="0.071922"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.491460" level="INFO">18</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.491218" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:41.491723" elapsed="0.000016"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:41.491567" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.491549" elapsed="0.000237"/>
</if>
<var name="${i}">18</var>
<status status="PASS" start="2026-04-13T02:58:41.418963" elapsed="0.072846"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:41.497733" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.497420" elapsed="0.000340"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:41.497806" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.497952" 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-04-13T02:58:41.497093" elapsed="0.000882"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.504340" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.504095" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.504823" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.504535" elapsed="0.000341"/>
</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-04-13T02:58:41.515408" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:41.515604" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:41.515870" 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-04-13T02:58:41.506957" elapsed="0.008971"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.504952" elapsed="0.011081"/>
</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-04-13T02:58:41.516411" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.516094" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.504932" elapsed="0.011665"/>
</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-04-13T02:58:41.523748" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.518846" elapsed="0.004950"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.518355" elapsed="0.005475"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.518313" elapsed="0.005576"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.526319" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.524160" elapsed="0.002205"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.523950" elapsed="0.002449"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.523933" elapsed="0.002491"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.526955" 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-04-13T02:58:41.526567" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.527284" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.527052" elapsed="0.000289"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.527822" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.527506" elapsed="0.000342"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.527365" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.527034" elapsed="0.000870"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.528401" 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-04-13T02:58:41.528045" elapsed="0.000382"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.528731" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.528500" elapsed="0.000288"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.529240" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.528953" elapsed="0.000313"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.528812" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.528481" elapsed="0.000840"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.529453" elapsed="0.000355"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:41.530224" 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-04-13T02:58:41.529956" elapsed="0.000293"/>
</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-04-13T02:58:41.530386" elapsed="0.002407"/>
</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-04-13T02:58:41.517390" elapsed="0.015465"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:41.533031" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-13T02:58:41.532926" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.532907" 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-04-13T02:58:41.533248" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:41.533317" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:41.535509" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:41.498281" elapsed="0.037257"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:41.535590" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:41.535756" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:41.496554" elapsed="0.039228"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.536213" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.535926" elapsed="0.000314"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.537174" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:41.536783" elapsed="0.000421"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:41.537260" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:58:41.537480" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:41.536437" elapsed="0.001070"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.537945" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.537667" elapsed="0.000329"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.541706" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.538134" elapsed="0.003601"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:41.560426" elapsed="0.000523"/>
</kw>
<msg time="2026-04-13T02:58:41.561013" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.560075" elapsed="0.001000"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.559655" elapsed="0.001498"/>
</kw>
<msg time="2026-04-13T02:58:41.561197" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.550860" elapsed="0.010380"/>
</kw>
<msg time="2026-04-13T02:58:41.561344" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.550357" elapsed="0.011011"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.561753" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.561513" elapsed="0.000265"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:41.561829" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:41.562027" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:41.562079" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:41.492122" elapsed="0.069981"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.562496" level="INFO">19</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.562252" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:41.562782" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:41.562615" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.562594" elapsed="0.000254"/>
</if>
<var name="${i}">19</var>
<status status="PASS" start="2026-04-13T02:58:41.491939" elapsed="0.070934"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:41.570297" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.569982" elapsed="0.000343"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:41.570372" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:41.570525" 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-04-13T02:58:41.569618" elapsed="0.000931"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.577147" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.576893" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.577572" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.577330" elapsed="0.000285"/>
</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-04-13T02:58:41.589228" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:41.589425" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:41.589695" 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-04-13T02:58:41.579637" elapsed="0.010098"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.577706" elapsed="0.012089"/>
</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-04-13T02:58:41.590036" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.589833" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.577684" elapsed="0.012469"/>
</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-04-13T02:58:41.594849" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.591573" elapsed="0.003346"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.591276" elapsed="0.003692"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.591247" elapsed="0.003755"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.598432" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.595371" elapsed="0.003124"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.595081" elapsed="0.003463"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.595058" elapsed="0.003521"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.599368" 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-04-13T02:58:41.598820" elapsed="0.000585"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.599831" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.599503" elapsed="0.000410"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.600581" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.600146" elapsed="0.000471"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.599946" elapsed="0.000743"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.599478" elapsed="0.001241"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.601464" 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-04-13T02:58:41.600920" elapsed="0.000583"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.601933" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.601603" elapsed="0.000410"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.602671" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.602241" elapsed="0.000469"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.602046" elapsed="0.000713"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.601578" elapsed="0.001210"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.602977" elapsed="0.000475"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:41.604090" 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-04-13T02:58:41.603683" elapsed="0.000442"/>
</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-04-13T02:58:41.604330" elapsed="0.002742"/>
</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-04-13T02:58:41.590638" elapsed="0.016497"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:41.607313" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T02:58:41.607205" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.607186" elapsed="0.000220"/>
</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-04-13T02:58:41.607546" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:41.607615" elapsed="0.000018"/>
</return>
<msg time="2026-04-13T02:58:41.609831" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:41.571077" elapsed="0.038782"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:41.609911" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.610108" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:41.569021" elapsed="0.041113"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.610574" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.610281" elapsed="0.000320"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.611542" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:41.611144" elapsed="0.000425"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:41.611618" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T02:58:41.611794" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:41.610821" elapsed="0.000998"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.612235" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.611964" elapsed="0.000316"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.615929" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.612419" elapsed="0.003538"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:41.633743" elapsed="0.000507"/>
</kw>
<msg time="2026-04-13T02:58:41.634309" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.633372" elapsed="0.000999"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.632996" elapsed="0.001451"/>
</kw>
<msg time="2026-04-13T02:58:41.634490" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.624690" elapsed="0.009844"/>
</kw>
<msg time="2026-04-13T02:58:41.634663" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.624321" elapsed="0.010370"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.635053" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.634838" elapsed="0.000241"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:41.635129" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:41.635326" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:41.635381" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:41.563213" elapsed="0.072192"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.635831" level="INFO">20</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.635562" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:41.636260" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:41.635950" elapsed="0.000357"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.635929" elapsed="0.000400"/>
</if>
<var name="${i}">20</var>
<status status="PASS" start="2026-04-13T02:58:41.563022" elapsed="0.073331"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:41.642467" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.642168" elapsed="0.000325"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:41.642540" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:41.642706" 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-04-13T02:58:41.641836" elapsed="0.000895"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.650588" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.650207" elapsed="0.000472"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.651217" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.650880" elapsed="0.000396"/>
</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-04-13T02:58:41.665610" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:41.665970" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:41.666207" 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-04-13T02:58:41.654034" elapsed="0.012234"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.651380" elapsed="0.014994"/>
</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-04-13T02:58:41.666822" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.666441" elapsed="0.000539"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.651349" elapsed="0.015684"/>
</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-04-13T02:58:41.673322" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.669592" elapsed="0.003797"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.669005" elapsed="0.004433"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.668957" elapsed="0.004518"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.677033" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.673897" elapsed="0.003200"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.673581" elapsed="0.003565"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.673556" elapsed="0.003625"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.678063" 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-04-13T02:58:41.677408" elapsed="0.000695"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.678514" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.678203" elapsed="0.000371"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.679070" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.678766" elapsed="0.000330"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.678599" elapsed="0.000534"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.678178" elapsed="0.000979"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.679705" 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-04-13T02:58:41.679316" elapsed="0.000417"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.680020" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.679803" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.680539" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.680244" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.680102" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.679785" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.680787" elapsed="0.000350"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:41.681590" 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-04-13T02:58:41.681289" elapsed="0.000328"/>
</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-04-13T02:58:41.681795" elapsed="0.002430"/>
</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-04-13T02:58:41.667930" elapsed="0.016425"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:41.684540" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-13T02:58:41.684428" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.684409" 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-04-13T02:58:41.684793" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:41.684864" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T02:58:41.687269" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:41.643112" elapsed="0.044186"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:41.687352" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:41.687507" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:41.641273" elapsed="0.046260"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.687990" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.687697" elapsed="0.000321"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.688991" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:41.688568" elapsed="0.000452"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:41.689069" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:41.689228" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:41.688225" elapsed="0.001030"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.689671" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.689399" elapsed="0.000321"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.693515" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.689879" elapsed="0.003665"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:41.711408" elapsed="0.000540"/>
</kw>
<msg time="2026-04-13T02:58:41.712009" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.711061" elapsed="0.001009"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.710682" elapsed="0.001468"/>
</kw>
<msg time="2026-04-13T02:58:41.712194" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.702475" elapsed="0.009766"/>
</kw>
<msg time="2026-04-13T02:58:41.712346" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.702126" elapsed="0.010245"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.712748" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.712518" elapsed="0.000256"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:41.712825" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:41.713094" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:41.713148" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:41.636719" elapsed="0.076453"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.713569" level="INFO">21</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.713322" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:41.713861" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:41.713713" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.713692" elapsed="0.000236"/>
</if>
<var name="${i}">21</var>
<status status="PASS" start="2026-04-13T02:58:41.636506" elapsed="0.077446"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:41.720263" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.719962" elapsed="0.000328"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:41.720336" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:41.720487" 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-04-13T02:58:41.719606" elapsed="0.000907"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.726832" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.726565" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.727256" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.727016" elapsed="0.000283"/>
</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-04-13T02:58:41.740616" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:41.740835" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:41.740965" 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-04-13T02:58:41.729301" elapsed="0.011694"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.727366" elapsed="0.013689"/>
</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-04-13T02:58:41.741289" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.741089" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.727347" elapsed="0.014043"/>
</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-04-13T02:58:41.745663" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.742733" elapsed="0.002993"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.742400" elapsed="0.003368"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.742376" elapsed="0.003428"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.748927" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.746143" elapsed="0.002839"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.745886" elapsed="0.003138"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.745862" elapsed="0.003191"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.749779" 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-04-13T02:58:41.749261" elapsed="0.000549"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.750187" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.749912" elapsed="0.000340"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.750870" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.750455" elapsed="0.000445"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.750281" elapsed="0.000662"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.749891" elapsed="0.001078"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.751569" 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-04-13T02:58:41.751145" elapsed="0.000455"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.752079" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.751804" elapsed="0.000340"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.752703" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.752332" elapsed="0.000405"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.752169" elapsed="0.000614"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.751780" elapsed="0.001030"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.753003" elapsed="0.000467"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:41.753994" 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-04-13T02:58:41.753668" 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-04-13T02:58:41.754163" elapsed="0.002926"/>
</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-04-13T02:58:41.741871" elapsed="0.015306"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:41.757421" elapsed="0.000050"/>
</return>
<status status="PASS" start="2026-04-13T02:58:41.757281" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.757252" elapsed="0.000301"/>
</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-04-13T02:58:41.757756" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:41.757841" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T02:58:41.760185" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:41.720847" elapsed="0.039368"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:41.760270" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:41.760426" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:41.719073" elapsed="0.041378"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.760980" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.760601" elapsed="0.000409"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.762137" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:41.761715" elapsed="0.000450"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:41.762215" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:58:41.762419" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:41.761287" elapsed="0.001166"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.763048" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.762665" elapsed="0.000448"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.767923" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.763300" elapsed="0.004668"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:41.789204" elapsed="0.001010"/>
</kw>
<msg time="2026-04-13T02:58:41.790448" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.788456" elapsed="0.002092"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.787802" elapsed="0.002894"/>
</kw>
<msg time="2026-04-13T02:58:41.790767" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.778053" elapsed="0.012781"/>
</kw>
<msg time="2026-04-13T02:58:41.790996" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.777579" elapsed="0.013453"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.791664" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.791253" elapsed="0.000452"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:41.791783" elapsed="0.000050"/>
</return>
<msg time="2026-04-13T02:58:41.792078" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:41.792157" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:41.714310" elapsed="0.077883"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.792706" level="INFO">22</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.792417" elapsed="0.000333"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:41.792992" elapsed="0.000020"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:41.792832" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.792809" elapsed="0.000255"/>
</if>
<var name="${i}">22</var>
<status status="PASS" start="2026-04-13T02:58:41.714097" elapsed="0.078993"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:41.799737" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.799294" elapsed="0.000475"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:41.799827" elapsed="0.000049"/>
</return>
<msg time="2026-04-13T02:58:41.800013" 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-04-13T02:58:41.798921" elapsed="0.001124"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.806722" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.806359" elapsed="0.000425"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.807177" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.806930" 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-04-13T02:58:41.820524" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:41.821029" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:41.821385" 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-04-13T02:58:41.809515" elapsed="0.011956"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.807327" elapsed="0.014291"/>
</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-04-13T02:58:41.822289" elapsed="0.000077"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.821768" elapsed="0.000737"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.807298" elapsed="0.015286"/>
</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-04-13T02:58:41.830020" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.825736" elapsed="0.004363"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.825207" elapsed="0.004944"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.825158" elapsed="0.005134"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.833965" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.830745" elapsed="0.003306"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.830392" elapsed="0.003716"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.830365" elapsed="0.003786"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.835078" 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-04-13T02:58:41.834436" elapsed="0.000681"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.835555" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.835228" elapsed="0.000441"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.836425" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.835931" elapsed="0.000532"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.835710" elapsed="0.000804"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.835197" elapsed="0.001347"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.837289" 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-04-13T02:58:41.836775" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.837773" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.837431" elapsed="0.000431"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.838552" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.838124" elapsed="0.000468"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.837901" elapsed="0.000764"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.837403" elapsed="0.001296"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.838917" elapsed="0.000495"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:41.840087" 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-04-13T02:58:41.839617" elapsed="0.000508"/>
</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-04-13T02:58:41.840355" elapsed="0.003671"/>
</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-04-13T02:58:41.823887" elapsed="0.020250"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:41.844492" elapsed="0.000057"/>
</return>
<status status="PASS" start="2026-04-13T02:58:41.844315" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.844275" elapsed="0.000395"/>
</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-04-13T02:58:41.844890" elapsed="0.000036"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:41.845000" elapsed="0.000024"/>
</return>
<msg time="2026-04-13T02:58:41.848261" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:41.800445" elapsed="0.047892"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:41.848420" elapsed="0.000049"/>
</return>
<msg time="2026-04-13T02:58:41.848681" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:41.798294" elapsed="0.050429"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.849448" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.848960" elapsed="0.000528"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.851010" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:41.850374" elapsed="0.000678"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:41.851124" elapsed="0.000046"/>
</return>
<msg time="2026-04-13T02:58:41.851468" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:41.849837" elapsed="0.001672"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.852105" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.851742" elapsed="0.000434"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.857678" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.852437" elapsed="0.005284"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:41.886243" elapsed="0.000835"/>
</kw>
<msg time="2026-04-13T02:58:41.887186" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.885553" elapsed="0.001733"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.884562" elapsed="0.002851"/>
</kw>
<msg time="2026-04-13T02:58:41.887486" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.870054" elapsed="0.017512"/>
</kw>
<msg time="2026-04-13T02:58:41.887786" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.869286" elapsed="0.018540"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.888391" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.888063" elapsed="0.000370"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:41.888509" elapsed="0.000050"/>
</return>
<msg time="2026-04-13T02:58:41.888897" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:41.889147" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:41.793524" elapsed="0.095680"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.889795" level="INFO">23</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.889492" elapsed="0.000350"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:41.890088" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:41.889926" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.889903" elapsed="0.000256"/>
</if>
<var name="${i}">23</var>
<status status="PASS" start="2026-04-13T02:58:41.793261" elapsed="0.096926"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:41.896506" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.896171" elapsed="0.000363"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:41.896581" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:41.896764" 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-04-13T02:58:41.895829" elapsed="0.000967"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.903887" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.903530" elapsed="0.000418"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.904455" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.904133" 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-04-13T02:58:41.922080" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:41.922287" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:41.922561" 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-04-13T02:58:41.907373" elapsed="0.015229"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.904606" elapsed="0.018092"/>
</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-04-13T02:58:41.922988" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.922742" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.904579" elapsed="0.018540"/>
</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-04-13T02:58:41.928339" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.924796" elapsed="0.003615"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.924444" elapsed="0.004018"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.924411" elapsed="0.004090"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.932229" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.928918" elapsed="0.003379"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.928588" elapsed="0.003759"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.928563" elapsed="0.003823"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.933237" 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-04-13T02:58:41.932632" elapsed="0.000643"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.933736" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.933378" elapsed="0.000446"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.934515" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.934084" elapsed="0.000469"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.933861" elapsed="0.000746"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.933351" elapsed="0.001308"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.935413" 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-04-13T02:58:41.934881" elapsed="0.000571"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:41.935896" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:41.935556" elapsed="0.000425"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.936688" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.936233" elapsed="0.000496"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.936019" elapsed="0.000762"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.935529" elapsed="0.001285"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.937025" elapsed="0.000513"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:41.938249" 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-04-13T02:58:41.937812" elapsed="0.000475"/>
</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-04-13T02:58:41.938495" elapsed="0.003584"/>
</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-04-13T02:58:41.923748" elapsed="0.018429"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:41.942440" elapsed="0.000049"/>
</return>
<status status="PASS" start="2026-04-13T02:58:41.942280" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.942253" elapsed="0.000329"/>
</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-04-13T02:58:41.942806" elapsed="0.000033"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:41.942911" elapsed="0.000023"/>
</return>
<msg time="2026-04-13T02:58:41.946218" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:41.897194" elapsed="0.049066"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:41.946339" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T02:58:41.946623" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:41.895247" elapsed="0.051438"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.947344" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.946907" elapsed="0.000478"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.948801" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:41.948188" elapsed="0.000656"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:41.948917" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T02:58:41.949148" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:41.947711" elapsed="0.001477"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.949808" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.949399" elapsed="0.000481"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.955410" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.950113" elapsed="0.005341"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:41.977812" elapsed="0.000505"/>
</kw>
<msg time="2026-04-13T02:58:41.978425" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.977441" elapsed="0.001046"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.977052" elapsed="0.001519"/>
</kw>
<msg time="2026-04-13T02:58:41.978617" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:41.967825" elapsed="0.010865"/>
</kw>
<msg time="2026-04-13T02:58:41.978797" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:41.967347" elapsed="0.011474"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:41.979167" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:41.978966" elapsed="0.000226"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:41.979243" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:41.979441" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:41.979492" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:41.890588" elapsed="0.088928"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.979933" level="INFO">24</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.979684" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:41.980189" elapsed="0.000016"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:41.980044" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.980026" elapsed="0.000229"/>
</if>
<var name="${i}">24</var>
<status status="PASS" start="2026-04-13T02:58:41.890356" elapsed="0.089927"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:41.986321" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:41.986013" elapsed="0.000335"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:41.986396" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:41.986597" 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-04-13T02:58:41.985679" elapsed="0.000944"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.993074" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.992818" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:41.993503" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:41.993259" 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-04-13T02:58:42.008779" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:42.009048" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:42.009283" 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-04-13T02:58:41.995657" elapsed="0.013686"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:41.993616" elapsed="0.015821"/>
</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-04-13T02:58:42.009842" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.009496" elapsed="0.000492"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:41.993597" elapsed="0.016439"/>
</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-04-13T02:58:42.017734" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.012449" elapsed="0.005393"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.011900" elapsed="0.006017"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.011858" elapsed="0.006114"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.021300" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.018576" elapsed="0.002771"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.018097" elapsed="0.003284"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.018061" elapsed="0.003344"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.022034" 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-04-13T02:58:42.021573" elapsed="0.000489"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.022357" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.022133" elapsed="0.000281"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.022921" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.022587" elapsed="0.000360"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.022438" elapsed="0.000545"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.022115" elapsed="0.000889"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.023535" 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-04-13T02:58:42.023170" elapsed="0.000393"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.023882" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.023659" elapsed="0.000281"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.024399" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.024104" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.023964" elapsed="0.000496"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.023621" elapsed="0.000860"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.024619" elapsed="0.000381"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:42.025443" 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-04-13T02:58:42.025150" 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-04-13T02:58:42.025612" elapsed="0.002555"/>
</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-04-13T02:58:42.010896" elapsed="0.017389"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:42.028470" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-13T02:58:42.028358" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.028339" elapsed="0.000226"/>
</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-04-13T02:58:42.028717" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:42.028788" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:42.030991" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:41.987014" elapsed="0.044007"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:42.031076" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.031257" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:41.985114" elapsed="0.046172"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.031758" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.031447" elapsed="0.000339"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.032749" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:42.032326" elapsed="0.000451"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:42.032825" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:42.032983" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:42.031994" elapsed="0.001016"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.033422" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.033168" elapsed="0.000301"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.037240" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.033607" elapsed="0.003661"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:42.054518" elapsed="0.000521"/>
</kw>
<msg time="2026-04-13T02:58:42.055091" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.054172" elapsed="0.000976"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.053798" elapsed="0.001425"/>
</kw>
<msg time="2026-04-13T02:58:42.055267" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.045591" elapsed="0.009720"/>
</kw>
<msg time="2026-04-13T02:58:42.055412" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.045269" elapsed="0.010167"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.055843" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.055602" elapsed="0.000267"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:42.055916" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.056144" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:42.056196" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:41.980632" elapsed="0.075588"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.056614" level="INFO">25</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.056369" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:42.056910" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:42.056760" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.056737" elapsed="0.000240"/>
</if>
<var name="${i}">25</var>
<status status="PASS" start="2026-04-13T02:58:41.980438" elapsed="0.076562"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:42.064191" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.063874" elapsed="0.000344"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:42.064265" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:42.064415" 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-04-13T02:58:42.063504" elapsed="0.000935"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.070827" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.070556" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.071267" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.071011" elapsed="0.000300"/>
</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-04-13T02:58:42.087500" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:42.087818" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:42.088056" 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-04-13T02:58:42.073348" elapsed="0.014810"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.071380" elapsed="0.016875"/>
</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-04-13T02:58:42.088624" elapsed="0.000093"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.088312" elapsed="0.000503"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.071361" elapsed="0.017500"/>
</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-04-13T02:58:42.096519" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.091122" elapsed="0.005447"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.090599" elapsed="0.006005"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.090556" elapsed="0.006073"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.099184" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.096917" elapsed="0.002315"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.096705" elapsed="0.002562"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.096688" elapsed="0.002603"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.099859" 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-04-13T02:58:42.099445" elapsed="0.000442"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.100190" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.099957" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.100815" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.100490" elapsed="0.000351"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.100321" elapsed="0.000556"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.099939" elapsed="0.000959"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.101419" 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-04-13T02:58:42.101040" elapsed="0.000406"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.101808" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.101568" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.102342" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.102034" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.101891" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.101549" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.102563" elapsed="0.000370"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:42.103382" 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-04-13T02:58:42.103083" elapsed="0.000325"/>
</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-04-13T02:58:42.103548" elapsed="0.002481"/>
</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-04-13T02:58:42.089612" elapsed="0.016482"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:42.106287" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-13T02:58:42.106166" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.106146" elapsed="0.000230"/>
</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-04-13T02:58:42.106509" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:42.106580" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:42.108874" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:42.064774" elapsed="0.044128"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:42.108955" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:42.109104" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:42.062966" elapsed="0.046165"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.109577" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.109275" elapsed="0.000329"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.110554" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:42.110148" elapsed="0.000435"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:42.110635" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T02:58:42.110810" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:42.109825" elapsed="0.001011"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.111235" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.110982" elapsed="0.000300"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.115005" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.111427" elapsed="0.003606"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:42.132424" elapsed="0.000527"/>
</kw>
<msg time="2026-04-13T02:58:42.133046" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.132075" elapsed="0.001034"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.131688" elapsed="0.001498"/>
</kw>
<msg time="2026-04-13T02:58:42.133229" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.123307" elapsed="0.009966"/>
</kw>
<msg time="2026-04-13T02:58:42.133379" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.122995" elapsed="0.010409"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.133777" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.133547" elapsed="0.000257"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:42.133851" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:42.134039" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:42.134100" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:42.057338" elapsed="0.076789"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.134518" level="INFO">26</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.134275" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:42.134791" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:42.134631" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.134609" elapsed="0.000248"/>
</if>
<var name="${i}">26</var>
<status status="PASS" start="2026-04-13T02:58:42.057147" elapsed="0.077734"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:42.141186" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.140843" elapsed="0.000370"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:42.141260" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:42.141421" 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-04-13T02:58:42.140488" elapsed="0.000958"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.147785" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.147515" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.148212" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.147968" 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-04-13T02:58:42.162837" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:42.162970" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:42.163068" 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-04-13T02:58:42.150332" elapsed="0.012761"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.148324" elapsed="0.014812"/>
</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-04-13T02:58:42.163302" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.163162" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.148304" elapsed="0.015084"/>
</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-04-13T02:58:42.170883" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.165550" elapsed="0.005442"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.165043" elapsed="0.006022"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.164994" elapsed="0.006220"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.175613" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.171872" elapsed="0.003805"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.171358" elapsed="0.004355"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.171319" elapsed="0.004419"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.176284" 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-04-13T02:58:42.175895" elapsed="0.000416"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.176626" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.176391" elapsed="0.000312"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.177181" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.176873" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.176728" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.176367" elapsed="0.000899"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.177852" 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-04-13T02:58:42.177419" elapsed="0.000460"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.178165" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.177948" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.178718" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.178387" elapsed="0.000357"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.178246" elapsed="0.000533"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.177931" elapsed="0.000869"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.178942" elapsed="0.000345"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:42.179763" 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-04-13T02:58:42.179439" 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-04-13T02:58:42.179930" elapsed="0.002484"/>
</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-04-13T02:58:42.164046" elapsed="0.018436"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:42.182701" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T02:58:42.182566" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.182540" elapsed="0.000256"/>
</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-04-13T02:58:42.182933" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:42.183004" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T02:58:42.185226" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:42.141781" elapsed="0.043474"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:42.185307" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.185461" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:42.139938" elapsed="0.045549"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.186007" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.185686" elapsed="0.000348"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.187055" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:42.186611" elapsed="0.000472"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:42.187132" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.187366" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:42.186254" elapsed="0.001140"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.187832" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.187540" elapsed="0.000341"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.191603" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.188020" elapsed="0.003615"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:42.209937" elapsed="0.000582"/>
</kw>
<msg time="2026-04-13T02:58:42.210590" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.209501" elapsed="0.001187"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.208950" elapsed="0.001823"/>
</kw>
<msg time="2026-04-13T02:58:42.210819" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.200267" elapsed="0.010599"/>
</kw>
<msg time="2026-04-13T02:58:42.210980" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.199746" elapsed="0.011259"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.211374" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.211156" elapsed="0.000249"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:42.211460" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:42.211682" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:42.211738" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:42.135224" elapsed="0.076538"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.212166" level="INFO">27</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.211917" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:42.212452" elapsed="0.000022"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:42.212288" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.212266" elapsed="0.000260"/>
</if>
<var name="${i}">27</var>
<status status="PASS" start="2026-04-13T02:58:42.135024" elapsed="0.077528"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:42.219019" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.218666" elapsed="0.000383"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:42.219107" elapsed="0.000038"/>
</return>
<msg time="2026-04-13T02:58:42.219274" 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-04-13T02:58:42.218306" elapsed="0.000992"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.225637" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.225377" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.226077" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.225835" elapsed="0.000284"/>
</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-04-13T02:58:42.239977" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:42.240144" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:42.240357" 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-04-13T02:58:42.228172" elapsed="0.012215"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.226194" elapsed="0.014247"/>
</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-04-13T02:58:42.240685" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.240474" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.226173" elapsed="0.014601"/>
</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-04-13T02:58:42.244247" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.241887" elapsed="0.002410"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.241657" elapsed="0.002674"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.241619" elapsed="0.002736"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.246819" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.244618" elapsed="0.002247"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.244412" elapsed="0.002487"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.244395" elapsed="0.002529"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.247480" 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-04-13T02:58:42.247084" elapsed="0.000423"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.247816" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.247577" elapsed="0.000297"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.248343" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.248044" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.247898" elapsed="0.000506"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.247559" elapsed="0.000866"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.248947" 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-04-13T02:58:42.248566" elapsed="0.000408"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.249259" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.249043" elapsed="0.000273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.249794" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.249479" elapsed="0.000342"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.249339" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.249025" elapsed="0.000852"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.250017" elapsed="0.000344"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:42.250863" 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-04-13T02:58:42.250512" 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-04-13T02:58:42.251028" elapsed="0.002358"/>
</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-04-13T02:58:42.241169" elapsed="0.012282"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:42.253633" elapsed="0.000047"/>
</return>
<status status="PASS" start="2026-04-13T02:58:42.253522" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.253503" elapsed="0.000236"/>
</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-04-13T02:58:42.253872" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:42.253943" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:42.256133" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:42.219631" elapsed="0.036530"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:42.256214" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:42.256404" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:42.217640" elapsed="0.038791"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.256913" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.256576" elapsed="0.000365"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.257882" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:42.257466" elapsed="0.000444"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:42.257959" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.258116" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:42.257144" elapsed="0.000998"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.258537" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.258284" elapsed="0.000300"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.262265" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.258764" elapsed="0.003529"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:42.279361" elapsed="0.000517"/>
</kw>
<msg time="2026-04-13T02:58:42.279930" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.279016" elapsed="0.000970"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.278614" elapsed="0.001446"/>
</kw>
<msg time="2026-04-13T02:58:42.280104" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.270532" elapsed="0.009616"/>
</kw>
<msg time="2026-04-13T02:58:42.280249" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.270224" elapsed="0.010049"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.280615" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.280414" elapsed="0.000243"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:42.280706" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.280895" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:42.280946" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:42.212950" elapsed="0.068020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.281357" level="INFO">28</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.281117" elapsed="0.000283"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:42.281606" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:42.281465" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.281447" elapsed="0.000243"/>
</if>
<var name="${i}">28</var>
<status status="PASS" start="2026-04-13T02:58:42.212733" elapsed="0.068981"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:42.287666" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.287353" elapsed="0.000340"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:42.287739" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.287887" 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-04-13T02:58:42.287004" elapsed="0.000908"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.294204" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.293958" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.294632" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.294387" elapsed="0.000303"/>
</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-04-13T02:58:42.308100" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:42.308217" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:42.308311" 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-04-13T02:58:42.296714" elapsed="0.011623"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.294757" elapsed="0.013622"/>
</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-04-13T02:58:42.308541" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.308404" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.294738" elapsed="0.013887"/>
</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-04-13T02:58:42.311929" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.309597" elapsed="0.002380"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.309394" elapsed="0.002617"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.309376" elapsed="0.002659"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.316955" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.312296" elapsed="0.004761"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.312091" elapsed="0.005041"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.312075" elapsed="0.005111"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.318364" 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-04-13T02:58:42.317504" elapsed="0.000921"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.319099" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.318579" elapsed="0.000648"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.320341" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.319674" elapsed="0.000724"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.319279" elapsed="0.001198"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.318540" elapsed="0.001974"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.321029" 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-04-13T02:58:42.320671" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.321334" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.321123" elapsed="0.000268"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.321863" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.321554" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.321414" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.321105" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.322077" elapsed="0.000338"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:42.322851" 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-04-13T02:58:42.322563" elapsed="0.000314"/>
</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-04-13T02:58:42.323014" elapsed="0.002338"/>
</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-04-13T02:58:42.308981" elapsed="0.016467"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:42.325625" elapsed="0.000043"/>
</return>
<status status="PASS" start="2026-04-13T02:58:42.325519" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.325500" 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-04-13T02:58:42.325860" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:42.325929" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:42.328120" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:42.288265" elapsed="0.039883"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:42.328200" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.328350" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:42.286461" elapsed="0.041915"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.328824" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.328518" elapsed="0.000333"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.329778" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:42.329372" elapsed="0.000435"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:42.329855" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:42.330011" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:42.329047" elapsed="0.000989"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.330428" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.330177" elapsed="0.000297"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.334137" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.330608" elapsed="0.003557"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:42.351232" elapsed="0.000483"/>
</kw>
<msg time="2026-04-13T02:58:42.351766" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.350887" elapsed="0.000929"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.350501" elapsed="0.001389"/>
</kw>
<msg time="2026-04-13T02:58:42.351932" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.342400" elapsed="0.009576"/>
</kw>
<msg time="2026-04-13T02:58:42.352104" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.342094" elapsed="0.010034"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.352478" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.352270" elapsed="0.000233"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:42.352549" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:42.352789" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:42.352841" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:42.282051" elapsed="0.070814"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.353253" level="INFO">29</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.353011" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:42.353498" elapsed="0.000015"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:42.353362" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.353344" elapsed="0.000216"/>
</if>
<var name="${i}">29</var>
<status status="PASS" start="2026-04-13T02:58:42.281861" elapsed="0.071722"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:42.359461" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.359165" elapsed="0.000322"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:42.359533" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.359698" 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-04-13T02:58:42.358836" elapsed="0.000886"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.366038" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.365788" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.366468" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.366223" 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-04-13T02:58:42.378387" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:42.378673" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:42.378886" 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-04-13T02:58:42.368555" elapsed="0.010386"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.366579" elapsed="0.012502"/>
</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-04-13T02:58:42.379448" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.379139" elapsed="0.000447"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.366559" elapsed="0.013103"/>
</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-04-13T02:58:42.386562" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.381923" elapsed="0.004716"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.381414" elapsed="0.005295"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.381372" elapsed="0.005376"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.390401" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.387140" elapsed="0.003327"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.386833" elapsed="0.003685"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.386808" elapsed="0.003746"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.391365" 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-04-13T02:58:42.390802" elapsed="0.000665"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.391927" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.391577" elapsed="0.000434"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.392761" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.392255" elapsed="0.000544"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.392046" elapsed="0.000805"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.391551" elapsed="0.001333"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.393577" 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-04-13T02:58:42.393091" elapsed="0.000513"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.393968" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.393750" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.394485" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.394190" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.394049" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.393731" elapsed="0.000836"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.394720" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:42.395502" 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-04-13T02:58:42.395216" elapsed="0.000311"/>
</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-04-13T02:58:42.395682" elapsed="0.002363"/>
</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-04-13T02:58:42.380451" elapsed="0.017662"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:42.398291" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T02:58:42.398184" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.398165" elapsed="0.000219"/>
</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-04-13T02:58:42.398517" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:42.398587" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:42.400801" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:42.360030" elapsed="0.040799"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:42.400881" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:42.401030" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:42.358300" elapsed="0.042756"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.401484" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.401199" elapsed="0.000316"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.402517" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:42.402063" elapsed="0.000482"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:42.402593" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.402768" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:42.401739" elapsed="0.001055"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.403186" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.402936" elapsed="0.000295"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.406893" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.403365" elapsed="0.003555"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:42.424110" elapsed="0.000481"/>
</kw>
<msg time="2026-04-13T02:58:42.424711" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.423763" elapsed="0.001007"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.423374" elapsed="0.001473"/>
</kw>
<msg time="2026-04-13T02:58:42.424890" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.415257" elapsed="0.009677"/>
</kw>
<msg time="2026-04-13T02:58:42.425062" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.414949" elapsed="0.010139"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.425433" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.425231" elapsed="0.000228"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:42.425505" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.425715" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:42.425767" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:42.353918" elapsed="0.071873"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.426180" level="INFO">30</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.425938" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:42.426430" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:42.426288" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.426270" elapsed="0.000227"/>
</if>
<var name="${i}">30</var>
<status status="PASS" start="2026-04-13T02:58:42.353734" elapsed="0.072791"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:42.432476" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.432175" elapsed="0.000329"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:42.432552" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:42.432720" 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-04-13T02:58:42.431843" elapsed="0.000903"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.439219" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.438967" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.439658" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.439402" elapsed="0.000302"/>
</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-04-13T02:58:42.454926" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:42.455059" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:42.455158" 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-04-13T02:58:42.441898" elapsed="0.013286"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.439920" elapsed="0.015307"/>
</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-04-13T02:58:42.455393" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.455253" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.439901" elapsed="0.015577"/>
</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-04-13T02:58:42.462946" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.457738" elapsed="0.005315"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.457228" elapsed="0.005899"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.457186" elapsed="0.006090"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.467550" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.463908" elapsed="0.003689"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.463409" elapsed="0.004226"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.463371" elapsed="0.004301"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.468230" 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-04-13T02:58:42.467837" elapsed="0.000419"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.468543" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.468325" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.469083" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.468786" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.468624" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.468308" elapsed="0.000859"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.469696" 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-04-13T02:58:42.469307" elapsed="0.000417"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.470009" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.469794" elapsed="0.000271"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.470518" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.470228" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.470089" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.469776" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.470753" elapsed="0.000342"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:42.471532" 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-04-13T02:58:42.471244" elapsed="0.000314"/>
</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-04-13T02:58:42.471711" elapsed="0.002347"/>
</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-04-13T02:58:42.456265" elapsed="0.017857"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:42.474301" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-13T02:58:42.474194" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.474175" 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-04-13T02:58:42.474521" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:42.474591" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:42.476782" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:42.433070" elapsed="0.043740"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:42.476861" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:42.477011" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:42.431288" elapsed="0.045748"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.477465" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.477179" elapsed="0.000314"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.478445" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:42.478052" elapsed="0.000421"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:42.478520" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.478735" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:42.477708" elapsed="0.001053"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.479152" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.478903" elapsed="0.000296"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.482869" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.479334" elapsed="0.003563"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:42.500307" elapsed="0.000512"/>
</kw>
<msg time="2026-04-13T02:58:42.500873" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.499963" elapsed="0.000966"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.499577" elapsed="0.001426"/>
</kw>
<msg time="2026-04-13T02:58:42.501046" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.491357" elapsed="0.009732"/>
</kw>
<msg time="2026-04-13T02:58:42.501190" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.491026" elapsed="0.010189"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.501556" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.501355" elapsed="0.000226"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:42.501630" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T02:58:42.501838" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:42.501889" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:42.426888" elapsed="0.075026"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.502322" level="INFO">31</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.502061" elapsed="0.000304"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:42.502573" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:42.502432" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.502414" elapsed="0.000241"/>
</if>
<var name="${i}">31</var>
<status status="PASS" start="2026-04-13T02:58:42.426696" elapsed="0.075985"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:42.509596" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.509298" elapsed="0.000324"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:42.509685" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:42.509836" 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-04-13T02:58:42.508970" elapsed="0.000890"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.516115" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.515867" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.516537" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.516296" elapsed="0.000284"/>
</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-04-13T02:58:42.533670" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:42.533935" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:42.534243" 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-04-13T02:58:42.518593" elapsed="0.015708"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.516663" elapsed="0.017731"/>
</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-04-13T02:58:42.534818" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.534451" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.516631" elapsed="0.018380"/>
</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-04-13T02:58:42.542473" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.537195" elapsed="0.005385"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.536744" elapsed="0.005988"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.536699" elapsed="0.006094"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.545760" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.543377" elapsed="0.002429"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.542919" elapsed="0.002921"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.542883" elapsed="0.002981"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.546420" 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-04-13T02:58:42.546027" elapsed="0.000420"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.546779" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.546521" elapsed="0.000317"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.547306" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.547007" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.546862" elapsed="0.000505"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.546501" elapsed="0.000887"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.547910" 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-04-13T02:58:42.547529" elapsed="0.000407"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.548217" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.548005" elapsed="0.000268"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.548748" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.548436" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.548297" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.547988" elapsed="0.000842"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.548966" elapsed="0.000341"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:42.549763" 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-04-13T02:58:42.549454" 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-04-13T02:58:42.549926" elapsed="0.002369"/>
</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-04-13T02:58:42.535787" elapsed="0.016573"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:42.552538" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-13T02:58:42.552431" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.552412" elapsed="0.000219"/>
</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-04-13T02:58:42.552785" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:42.552855" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:42.555056" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:42.510170" elapsed="0.044914"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:42.555135" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.555334" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:42.508427" elapsed="0.046933"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.555808" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.555503" elapsed="0.000332"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.556793" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:42.556359" elapsed="0.000463"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:42.556869" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.557024" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:42.556039" elapsed="0.001011"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.557442" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.557191" elapsed="0.000297"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.561164" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.557625" elapsed="0.003567"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:42.578249" elapsed="0.000508"/>
</kw>
<msg time="2026-04-13T02:58:42.578810" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.577906" elapsed="0.000960"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.577520" elapsed="0.001419"/>
</kw>
<msg time="2026-04-13T02:58:42.578982" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.569394" elapsed="0.009632"/>
</kw>
<msg time="2026-04-13T02:58:42.579125" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.569087" elapsed="0.010062"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.579508" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.579308" elapsed="0.000225"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:42.579580" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.579789" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:42.579842" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:42.503012" elapsed="0.076855"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.580258" level="INFO">32</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.580015" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:42.580510" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:42.580367" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.580349" elapsed="0.000225"/>
</if>
<var name="${i}">32</var>
<status status="PASS" start="2026-04-13T02:58:42.502823" elapsed="0.077774"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:42.586527" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.586229" elapsed="0.000325"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:42.586600" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:42.586766" 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-04-13T02:58:42.585900" elapsed="0.000891"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.593152" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.592906" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.593576" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.593336" 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-04-13T02:58:42.605656" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:42.605829" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:42.605961" 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-04-13T02:58:42.595775" elapsed="0.010221"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.593704" elapsed="0.012351"/>
</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-04-13T02:58:42.606283" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.606090" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.593685" elapsed="0.012715"/>
</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-04-13T02:58:42.611382" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.607852" elapsed="0.003635"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.607485" elapsed="0.004059"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.607450" elapsed="0.004129"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.615165" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.612064" elapsed="0.003166"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.611729" elapsed="0.003550"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.611686" elapsed="0.003628"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.616151" 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-04-13T02:58:42.615527" elapsed="0.000663"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.616611" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.616287" elapsed="0.000406"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.617160" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.616863" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.616718" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.616262" elapsed="0.000979"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.617758" 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-04-13T02:58:42.617381" elapsed="0.000404"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.618080" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.617863" elapsed="0.000273"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.618598" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.618301" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.618160" elapsed="0.000516"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.617841" elapsed="0.000857"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.618834" elapsed="0.000364"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:42.619678" 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-04-13T02:58:42.619352" elapsed="0.000354"/>
</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-04-13T02:58:42.619877" elapsed="0.002598"/>
</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-04-13T02:58:42.606897" elapsed="0.015688"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:42.622791" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-13T02:58:42.622678" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.622656" elapsed="0.000226"/>
</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-04-13T02:58:42.623017" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:42.623089" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:42.625347" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:42.587148" elapsed="0.038231"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:42.625442" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:42.625598" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:42.585360" elapsed="0.040265"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.626084" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.625790" elapsed="0.000322"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.627071" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:42.626668" elapsed="0.000432"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:42.627148" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.627306" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:42.626311" elapsed="0.001022"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.627772" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.627490" elapsed="0.000329"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.631535" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.627984" elapsed="0.003585"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:42.649046" elapsed="0.000496"/>
</kw>
<msg time="2026-04-13T02:58:42.649595" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.648689" elapsed="0.000985"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.648286" elapsed="0.001471"/>
</kw>
<msg time="2026-04-13T02:58:42.649800" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.639947" elapsed="0.009900"/>
</kw>
<msg time="2026-04-13T02:58:42.649952" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.639604" elapsed="0.010372"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.650343" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.650137" elapsed="0.000232"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:42.650416" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:42.650668" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:42.650723" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:42.580948" elapsed="0.069802"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.651160" level="INFO">33</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.650901" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:42.651420" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:42.651274" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.651255" elapsed="0.000232"/>
</if>
<var name="${i}">33</var>
<status status="PASS" start="2026-04-13T02:58:42.580759" elapsed="0.070751"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:42.657733" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.657406" elapsed="0.000354"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:42.657808" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:42.657958" 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-04-13T02:58:42.657057" elapsed="0.000926"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.664351" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.664099" elapsed="0.000354"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.664886" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.664603" elapsed="0.000326"/>
</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-04-13T02:58:42.678550" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:42.678766" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:42.678921" 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-04-13T02:58:42.666983" elapsed="0.011978"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.664999" elapsed="0.014027"/>
</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-04-13T02:58:42.679273" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.679064" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.664980" elapsed="0.014420"/>
</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-04-13T02:58:42.685985" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.681000" elapsed="0.005105"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.680662" elapsed="0.005524"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.680564" elapsed="0.005678"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.690580" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.686874" elapsed="0.003756"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.686370" elapsed="0.004310"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.686333" elapsed="0.004372"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.691249" 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-04-13T02:58:42.690860" elapsed="0.000422"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.691579" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.691356" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.692136" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.691830" elapsed="0.000333"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.691684" elapsed="0.000516"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.691337" elapsed="0.000885"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.692799" 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-04-13T02:58:42.692386" elapsed="0.000441"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.693166" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.692944" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.693732" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.693403" elapsed="0.000356"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.693248" elapsed="0.000549"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.692924" elapsed="0.000895"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.693957" elapsed="0.000352"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:42.694791" 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-04-13T02:58:42.694470" elapsed="0.000348"/>
</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-04-13T02:58:42.694961" elapsed="0.002399"/>
</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-04-13T02:58:42.679951" elapsed="0.017476"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:42.697617" elapsed="0.000047"/>
</return>
<status status="PASS" start="2026-04-13T02:58:42.697507" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.697487" 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-04-13T02:58:42.697863" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:42.697935" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:42.700143" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:42.658300" elapsed="0.041872"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:42.700226" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.700380" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:42.656509" elapsed="0.043897"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.700909" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.700568" elapsed="0.000371"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.701897" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:42.701464" elapsed="0.000462"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:42.701976" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:42.702136" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:42.701139" elapsed="0.001024"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.702568" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.702309" elapsed="0.000321"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.706377" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.702788" elapsed="0.003618"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:42.724793" elapsed="0.000746"/>
</kw>
<msg time="2026-04-13T02:58:42.725638" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.724263" elapsed="0.001453"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.723708" elapsed="0.002085"/>
</kw>
<msg time="2026-04-13T02:58:42.725836" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.714828" elapsed="0.011052"/>
</kw>
<msg time="2026-04-13T02:58:42.725983" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.714497" elapsed="0.011510"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.726354" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.726151" elapsed="0.000228"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:42.726427" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.726619" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:42.726692" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:42.651868" elapsed="0.074850"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.727108" level="INFO">34</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.726865" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:42.727361" elapsed="0.000016"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:42.727219" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.727201" elapsed="0.000224"/>
</if>
<var name="${i}">34</var>
<status status="PASS" start="2026-04-13T02:58:42.651674" elapsed="0.075774"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:42.733381" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.733033" elapsed="0.000378"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:42.733456" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:42.733605" 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-04-13T02:58:42.732700" elapsed="0.000930"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.739946" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.739697" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.740370" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.740129" elapsed="0.000283"/>
</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-04-13T02:58:42.754809" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:42.755065" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:42.755273" 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-04-13T02:58:42.742450" elapsed="0.012880"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.740479" elapsed="0.014945"/>
</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-04-13T02:58:42.755824" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.755480" elapsed="0.000485"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.740460" elapsed="0.015554"/>
</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-04-13T02:58:42.763361" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.758240" elapsed="0.005226"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.757787" elapsed="0.005754"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.757744" elapsed="0.005967"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.767799" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.764315" elapsed="0.003530"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.763848" elapsed="0.004031"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.763810" elapsed="0.004094"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.768457" 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-04-13T02:58:42.768063" elapsed="0.000421"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.768792" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.768554" elapsed="0.000296"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.769315" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.769017" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.768874" elapsed="0.000503"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.768536" elapsed="0.000862"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.769940" 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-04-13T02:58:42.769540" elapsed="0.000426"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.770249" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.770035" elapsed="0.000270"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.770780" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.770470" elapsed="0.000337"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.770329" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.770018" elapsed="0.000844"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.770997" elapsed="0.000340"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:42.771793" 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-04-13T02:58:42.771486" 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-04-13T02:58:42.771959" elapsed="0.002361"/>
</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-04-13T02:58:42.756800" elapsed="0.017585"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:42.774563" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-13T02:58:42.774456" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.774437" elapsed="0.000230"/>
</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-04-13T02:58:42.774801" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:42.774871" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:42.777065" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:42.733958" elapsed="0.043134"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:42.777144" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.777295" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:42.732156" elapsed="0.045165"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.777773" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.777466" elapsed="0.000334"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.778755" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:42.778336" elapsed="0.000447"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:42.778831" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.779029" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:42.778015" elapsed="0.001040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.779454" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.779200" elapsed="0.000300"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.783203" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.779655" elapsed="0.003576"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:42.800581" elapsed="0.000550"/>
</kw>
<msg time="2026-04-13T02:58:42.801203" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.800176" elapsed="0.001093"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.799675" elapsed="0.001675"/>
</kw>
<msg time="2026-04-13T02:58:42.801395" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.791477" elapsed="0.009965"/>
</kw>
<msg time="2026-04-13T02:58:42.801553" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.791161" elapsed="0.010417"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.801975" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.801758" elapsed="0.000242"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:42.802050" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:42.802251" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:42.802323" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:42.727798" elapsed="0.074551"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.802769" level="INFO">35</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.802502" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:42.803041" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:42.802892" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.802870" elapsed="0.000237"/>
</if>
<var name="${i}">35</var>
<status status="PASS" start="2026-04-13T02:58:42.727591" elapsed="0.075541"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:42.809180" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.808874" elapsed="0.000333"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:42.809254" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:42.809404" 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-04-13T02:58:42.808521" elapsed="0.000908"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.815757" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.815485" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.816183" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.815941" elapsed="0.000285"/>
</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-04-13T02:58:42.827757" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:42.827986" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:42.828269" 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-04-13T02:58:42.818260" elapsed="0.010052"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.816299" elapsed="0.012092"/>
</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-04-13T02:58:42.828912" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.828439" elapsed="0.000578"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.816278" elapsed="0.012773"/>
</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-04-13T02:58:42.834298" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.830745" elapsed="0.003633"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.830349" elapsed="0.004084"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.830319" elapsed="0.004152"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.838177" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.834920" elapsed="0.003323"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.834560" elapsed="0.003734"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.834534" elapsed="0.003796"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.839238" 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-04-13T02:58:42.838573" elapsed="0.000705"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.839671" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.839382" elapsed="0.000348"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.840204" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.839901" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.839754" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.839356" elapsed="0.000933"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.840814" 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-04-13T02:58:42.840430" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.841124" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.840911" elapsed="0.000269"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.841655" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.841344" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.841204" elapsed="0.000514"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.840893" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.841879" elapsed="0.000341"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:42.842692" 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-04-13T02:58:42.842368" elapsed="0.000351"/>
</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-04-13T02:58:42.842876" elapsed="0.002436"/>
</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-04-13T02:58:42.829669" elapsed="0.015714"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:42.845571" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T02:58:42.845458" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.845437" 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-04-13T02:58:42.845827" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:42.845898" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:42.848165" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:42.809775" elapsed="0.038420"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:42.848249" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.848480" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:42.807985" elapsed="0.040522"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.849016" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.848683" elapsed="0.000360"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.850059" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:42.849621" elapsed="0.000466"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:42.850137" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:42.850297" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:42.849264" elapsed="0.001060"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.850752" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.850470" elapsed="0.000329"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.854516" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.850936" elapsed="0.003609"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:42.871915" elapsed="0.000505"/>
</kw>
<msg time="2026-04-13T02:58:42.872482" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.871539" elapsed="0.001006"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.871122" elapsed="0.001500"/>
</kw>
<msg time="2026-04-13T02:58:42.872698" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.862973" elapsed="0.009771"/>
</kw>
<msg time="2026-04-13T02:58:42.872848" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.862613" elapsed="0.010260"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.873225" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.873019" elapsed="0.000231"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:42.873301" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:42.873495" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:42.873549" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:42.803502" elapsed="0.070071"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.873988" level="INFO">36</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.873741" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:42.874254" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:42.874108" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.874087" elapsed="0.000232"/>
</if>
<var name="${i}">36</var>
<status status="PASS" start="2026-04-13T02:58:42.803286" elapsed="0.071057"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:42.880335" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.880038" elapsed="0.000323"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:42.880407" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.880551" 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-04-13T02:58:42.879708" elapsed="0.000867"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.886898" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.886639" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.887324" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.887082" elapsed="0.000285"/>
</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-04-13T02:58:42.900793" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:42.900997" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:42.901140" 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-04-13T02:58:42.889413" elapsed="0.011768"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.887434" elapsed="0.013810"/>
</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-04-13T02:58:42.901495" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.901284" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.887415" elapsed="0.014205"/>
</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-04-13T02:58:42.906736" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.903158" elapsed="0.003653"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.902848" elapsed="0.004015"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.902820" elapsed="0.004080"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.910661" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.907303" elapsed="0.003434"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.906983" elapsed="0.003805"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.906958" elapsed="0.003869"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.911677" 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-04-13T02:58:42.911060" elapsed="0.000659"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.912212" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.911871" elapsed="0.000427"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.912877" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.912546" elapsed="0.000357"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.912333" elapsed="0.000609"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.911806" elapsed="0.001157"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.913481" 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-04-13T02:58:42.913110" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.913811" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.913577" elapsed="0.000294"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.914338" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.914038" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.913894" elapsed="0.000504"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.913559" elapsed="0.000860"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.914557" elapsed="0.000371"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:42.915371" 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-04-13T02:58:42.915078" 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-04-13T02:58:42.915541" elapsed="0.002411"/>
</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-04-13T02:58:42.902188" elapsed="0.015885"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:42.918266" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-13T02:58:42.918156" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.918135" elapsed="0.000219"/>
</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-04-13T02:58:42.918487" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:42.918562" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T02:58:42.920827" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:42.880971" elapsed="0.039884"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:42.920907" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.921066" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:42.879109" elapsed="0.041984"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.921530" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.921241" elapsed="0.000316"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.922506" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:42.922106" elapsed="0.000430"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:42.922587" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.922765" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:42.921778" elapsed="0.001013"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.923185" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.922933" elapsed="0.000298"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.926927" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.923367" elapsed="0.003587"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:42.943920" elapsed="0.000529"/>
</kw>
<msg time="2026-04-13T02:58:42.944500" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.943561" elapsed="0.000992"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.943192" elapsed="0.001437"/>
</kw>
<msg time="2026-04-13T02:58:42.944696" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.935103" elapsed="0.009640"/>
</kw>
<msg time="2026-04-13T02:58:42.944844" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:42.934797" elapsed="0.010071"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:42.945210" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.945010" elapsed="0.000225"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:42.945280" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:42.945505" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:42.945559" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:42.874702" elapsed="0.070886"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.946000" level="INFO">37</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.945753" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:42.946252" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:42.946111" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.946093" elapsed="0.000224"/>
</if>
<var name="${i}">37</var>
<status status="PASS" start="2026-04-13T02:58:42.874487" elapsed="0.071854"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:42.953353" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.953050" elapsed="0.000330"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:42.953425" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:42.953572" 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-04-13T02:58:42.952719" elapsed="0.000878"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.959885" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.959615" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.960311" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.960069" elapsed="0.000285"/>
</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-04-13T02:58:42.975000" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:42.975143" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:42.975259" 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-04-13T02:58:42.962402" elapsed="0.012883"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.960422" elapsed="0.014907"/>
</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-04-13T02:58:42.975507" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.975358" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.960402" elapsed="0.015264"/>
</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-04-13T02:58:42.983260" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.977934" elapsed="0.005430"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.977440" elapsed="0.005997"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.977397" elapsed="0.006093"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.987149" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.984106" elapsed="0.003089"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.983617" elapsed="0.003613"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.983578" elapsed="0.003676"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.987832" 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-04-13T02:58:42.987410" elapsed="0.000449"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.988147" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.987929" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.988692" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.988373" elapsed="0.000346"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.988229" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.987911" elapsed="0.000866"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.989316" 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-04-13T02:58:42.988938" elapsed="0.000404"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:42.989704" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:42.989469" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.990221" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.989927" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:42.989786" elapsed="0.000496"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.989451" elapsed="0.000852"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:42.990440" elapsed="0.000361"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:42.991240" 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-04-13T02:58:42.990950" elapsed="0.000316"/>
</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-04-13T02:58:42.991405" elapsed="0.002413"/>
</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-04-13T02:58:42.976446" elapsed="0.017447"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:42.994086" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-13T02:58:42.993974" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:42.993951" elapsed="0.000234"/>
</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-04-13T02:58:42.994335" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:42.994408" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:42.996656" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:42.953928" elapsed="0.042759"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:42.996741" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:42.996896" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:42.952142" elapsed="0.044781"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.997418" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:42.997086" elapsed="0.000360"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.998446" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:42.998036" elapsed="0.000438"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:42.998522" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:42.998698" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:42.997682" elapsed="0.001043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:42.999132" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:42.998873" elapsed="0.000305"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.002854" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:42.999315" elapsed="0.003567"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:43.019970" elapsed="0.000496"/>
</kw>
<msg time="2026-04-13T02:58:43.020580" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.019608" elapsed="0.001054"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.019234" elapsed="0.001507"/>
</kw>
<msg time="2026-04-13T02:58:43.020785" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.011124" elapsed="0.009705"/>
</kw>
<msg time="2026-04-13T02:58:43.020931" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.010812" elapsed="0.010143"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.021297" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.021096" elapsed="0.000226"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:43.021385" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:43.021573" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:43.021626" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:42.946691" elapsed="0.074977"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.022107" level="INFO">38</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.021816" elapsed="0.000337"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:43.022373" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:43.022229" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.022206" elapsed="0.000232"/>
</if>
<var name="${i}">38</var>
<status status="PASS" start="2026-04-13T02:58:42.946481" elapsed="0.075982"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:43.028407" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.028111" elapsed="0.000323"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.028479" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:43.028626" 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-04-13T02:58:43.027779" elapsed="0.000887"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.034951" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.034705" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.035373" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.035133" elapsed="0.000283"/>
</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-04-13T02:58:43.048075" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:43.048245" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:43.048377" 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-04-13T02:58:43.037597" elapsed="0.010815"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.035483" elapsed="0.012989"/>
</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-04-13T02:58:43.048731" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.048507" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.035465" elapsed="0.013387"/>
</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-04-13T02:58:43.055273" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.050275" elapsed="0.005105"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.049987" elapsed="0.005468"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.049960" elapsed="0.005625"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.059732" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.056226" elapsed="0.003554"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.055759" elapsed="0.004055"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.055719" elapsed="0.004119"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.060371" 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-04-13T02:58:43.059989" elapsed="0.000410"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.060701" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.060468" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.061224" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.060927" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.060783" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.060450" elapsed="0.000856"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.061824" 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-04-13T02:58:43.061448" elapsed="0.000402"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.062151" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.061934" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.062687" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.062373" elapsed="0.000342"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.062232" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.061902" elapsed="0.000869"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.062923" elapsed="0.000347"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:43.063729" 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-04-13T02:58:43.063421" 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-04-13T02:58:43.063894" elapsed="0.002368"/>
</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-04-13T02:58:43.049333" elapsed="0.016991"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:43.066501" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-13T02:58:43.066395" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.066376" elapsed="0.000208"/>
</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-04-13T02:58:43.066734" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:43.066805" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:43.069006" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:43.028989" elapsed="0.040046"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:43.069086" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:43.069240" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:43.027232" elapsed="0.042034"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.069717" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.069410" elapsed="0.000334"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.070797" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:43.070321" elapsed="0.000508"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:43.070882" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:43.071101" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:43.069939" elapsed="0.001193"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.071578" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.071300" elapsed="0.000324"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.075325" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.071781" elapsed="0.003573"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:43.092325" elapsed="0.000493"/>
</kw>
<msg time="2026-04-13T02:58:43.092869" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.091983" elapsed="0.000937"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.091599" elapsed="0.001394"/>
</kw>
<msg time="2026-04-13T02:58:43.093036" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.083532" elapsed="0.009547"/>
</kw>
<msg time="2026-04-13T02:58:43.093181" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.083224" elapsed="0.009980"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.093546" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.093346" elapsed="0.000224"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:43.093617" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T02:58:43.093822" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:43.093874" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:43.022825" elapsed="0.071073"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.094285" level="INFO">39</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.094045" elapsed="0.000282"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:43.094555" elapsed="0.000015"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:43.094412" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.094394" elapsed="0.000223"/>
</if>
<var name="${i}">39</var>
<status status="PASS" start="2026-04-13T02:58:43.022613" elapsed="0.072043"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:43.100502" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.100205" elapsed="0.000324"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.100575" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:43.100742" 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-04-13T02:58:43.099874" elapsed="0.000893"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.107025" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.106767" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.107453" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.107211" elapsed="0.000285"/>
</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-04-13T02:58:43.120557" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:43.120747" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:43.120932" 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-04-13T02:58:43.109504" elapsed="0.011465"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.107563" elapsed="0.013465"/>
</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-04-13T02:58:43.121259" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.121063" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.107544" elapsed="0.013833"/>
</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-04-13T02:58:43.127427" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.122806" elapsed="0.004729"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.122455" elapsed="0.005157"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.122428" elapsed="0.005274"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.132304" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.128296" elapsed="0.004055"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.127831" elapsed="0.004554"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.127794" elapsed="0.004616"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.132943" 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-04-13T02:58:43.132555" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.133255" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.133040" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.133791" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.133477" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.133335" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.133022" elapsed="0.000852"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.134371" 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-04-13T02:58:43.134014" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.134697" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.134467" elapsed="0.000287"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.135227" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.134917" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.134777" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.134449" elapsed="0.000860"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.135441" elapsed="0.000360"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:43.136221" 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-04-13T02:58:43.135949" 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-04-13T02:58:43.136382" elapsed="0.002337"/>
</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-04-13T02:58:43.121867" elapsed="0.016915"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:43.138956" elapsed="0.000050"/>
</return>
<status status="PASS" start="2026-04-13T02:58:43.138851" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.138833" elapsed="0.000232"/>
</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-04-13T02:58:43.139197" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:43.139266" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:43.141453" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:43.101077" elapsed="0.040404"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:43.141531" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:43.141732" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:43.099340" elapsed="0.042418"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.142190" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.141903" elapsed="0.000315"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.143152" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:43.142743" elapsed="0.000437"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:43.143228" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:43.143383" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:43.142411" elapsed="0.000998"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.143822" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.143549" elapsed="0.000319"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.147533" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.144003" elapsed="0.003559"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:43.164718" elapsed="0.000459"/>
</kw>
<msg time="2026-04-13T02:58:43.165228" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.164359" elapsed="0.000918"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.163984" elapsed="0.001368"/>
</kw>
<msg time="2026-04-13T02:58:43.165395" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.155814" elapsed="0.009624"/>
</kw>
<msg time="2026-04-13T02:58:43.165540" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.155489" elapsed="0.010075"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.165934" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.165730" elapsed="0.000229"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:43.166006" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:43.166189" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:43.166240" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:43.094979" elapsed="0.071285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.166675" level="INFO">40</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.166411" elapsed="0.000309"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:43.166921" elapsed="0.000014"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:43.166785" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.166767" elapsed="0.000216"/>
</if>
<var name="${i}">40</var>
<status status="PASS" start="2026-04-13T02:58:43.094794" elapsed="0.072211"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:43.172916" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.172599" elapsed="0.000343"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.172988" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:58:43.173151" 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-04-13T02:58:43.172264" elapsed="0.000912"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.179528" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.179222" elapsed="0.000387"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.180049" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.179802" 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-04-13T02:58:43.192945" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:43.193055" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:43.193149" 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-04-13T02:58:43.182482" elapsed="0.010692"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.180160" elapsed="0.013056"/>
</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-04-13T02:58:43.193381" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.193242" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.180142" elapsed="0.013322"/>
</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-04-13T02:58:43.198131" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.194833" elapsed="0.003366"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.194524" elapsed="0.003725"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.194497" elapsed="0.003787"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.201729" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.198675" elapsed="0.003119"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.198363" elapsed="0.003478"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.198340" elapsed="0.003536"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.202594" 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-04-13T02:58:43.202076" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.203061" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.202758" elapsed="0.000384"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.203810" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.203374" elapsed="0.000473"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.203176" elapsed="0.000755"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.202733" elapsed="0.001231"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.204634" 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-04-13T02:58:43.204161" elapsed="0.000513"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.204957" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.204743" elapsed="0.000270"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.205465" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.205176" elapsed="0.000314"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.205036" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.204726" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.205697" elapsed="0.000337"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:43.206450" 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-04-13T02:58:43.206181" elapsed="0.000295"/>
</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-04-13T02:58:43.206614" elapsed="0.002339"/>
</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-04-13T02:58:43.193943" elapsed="0.015107"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:43.209228" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-13T02:58:43.209121" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.209103" elapsed="0.000208"/>
</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-04-13T02:58:43.209442" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:43.209512" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:43.211699" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:43.173527" elapsed="0.038200"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:43.211778" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:43.211928" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:43.171744" elapsed="0.040209"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.212413" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.212124" elapsed="0.000316"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.213363" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:43.212972" elapsed="0.000420"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:43.213441" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:43.213603" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:43.212638" elapsed="0.000994"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.214039" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.213789" elapsed="0.000295"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.217775" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.214219" elapsed="0.003584"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:43.234813" elapsed="0.000456"/>
</kw>
<msg time="2026-04-13T02:58:43.235321" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.234453" elapsed="0.000918"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.234084" elapsed="0.001360"/>
</kw>
<msg time="2026-04-13T02:58:43.235486" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.226020" elapsed="0.009510"/>
</kw>
<msg time="2026-04-13T02:58:43.235634" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.225713" elapsed="0.009966"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.236024" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.235825" elapsed="0.000223"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:43.236094" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:43.236315" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:43.236399" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:43.167319" elapsed="0.069105"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.236841" level="INFO">41</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.236576" elapsed="0.000309"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:43.237088" elapsed="0.000016"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:43.236951" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.236933" elapsed="0.000218"/>
</if>
<var name="${i}">41</var>
<status status="PASS" start="2026-04-13T02:58:43.167136" elapsed="0.070038"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:43.243114" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.242814" elapsed="0.000327"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.243187" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:43.243334" 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-04-13T02:58:43.242425" elapsed="0.000934"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.249786" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.249520" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.250213" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.249971" elapsed="0.000285"/>
</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-04-13T02:58:43.261806" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:43.262064" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:43.262281" 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-04-13T02:58:43.252252" elapsed="0.010087"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.250323" elapsed="0.012114"/>
</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-04-13T02:58:43.262855" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.262494" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.250305" elapsed="0.012745"/>
</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-04-13T02:58:43.268705" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.265365" elapsed="0.003424"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.264891" elapsed="0.003947"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.264847" elapsed="0.004025"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.272468" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.269243" elapsed="0.003292"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.268951" elapsed="0.003635"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.268928" elapsed="0.003694"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.273464" 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-04-13T02:58:43.272898" elapsed="0.000606"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.273849" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.273606" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.274373" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.274074" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.273931" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.273580" elapsed="0.000875"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.274975" 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-04-13T02:58:43.274595" elapsed="0.000406"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.275351" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.275131" elapsed="0.000277"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.275889" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.275575" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.275431" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.275113" elapsed="0.000859"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.276111" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:43.276956" 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-04-13T02:58:43.276609" elapsed="0.000373"/>
</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-04-13T02:58:43.277124" elapsed="0.002368"/>
</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-04-13T02:58:43.263842" elapsed="0.015716"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:43.279758" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T02:58:43.279633" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.279610" 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-04-13T02:58:43.279989" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:43.280059" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T02:58:43.282321" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:43.243686" elapsed="0.038664"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:43.282402" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:43.282553" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:43.241900" elapsed="0.040679"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.283036" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.282742" elapsed="0.000321"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.284017" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:43.283597" elapsed="0.000448"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:43.284093" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:43.284249" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:43.283271" elapsed="0.001004"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.284688" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.284420" elapsed="0.000314"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.288413" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.284871" elapsed="0.003570"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:43.305761" elapsed="0.000517"/>
</kw>
<msg time="2026-04-13T02:58:43.306415" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.305364" elapsed="0.001117"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.304905" elapsed="0.001656"/>
</kw>
<msg time="2026-04-13T02:58:43.306606" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.296741" elapsed="0.009936"/>
</kw>
<msg time="2026-04-13T02:58:43.306789" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.296341" elapsed="0.010612"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.307313" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.307101" elapsed="0.000238"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:43.307389" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:43.307586" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:43.307658" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:43.237490" elapsed="0.070195"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.308080" level="INFO">42</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.307835" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:43.308354" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:43.308201" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.308180" elapsed="0.000243"/>
</if>
<var name="${i}">42</var>
<status status="PASS" start="2026-04-13T02:58:43.237304" elapsed="0.071144"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:43.314518" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.314194" elapsed="0.000351"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.314592" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:43.314761" 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-04-13T02:58:43.313863" elapsed="0.000922"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.321077" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.320819" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.321554" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.321260" elapsed="0.000336"/>
</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-04-13T02:58:43.333521" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:43.333787" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:43.333938" 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-04-13T02:58:43.323614" elapsed="0.010361"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.321686" elapsed="0.012354"/>
</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-04-13T02:58:43.334311" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.334080" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.321664" elapsed="0.012773"/>
</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-04-13T02:58:43.339123" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.335905" elapsed="0.003285"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.335591" elapsed="0.003645"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.335564" elapsed="0.003780"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.342800" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.339745" elapsed="0.003120"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.339429" elapsed="0.003483"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.339405" elapsed="0.003541"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.343737" 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-04-13T02:58:43.343164" elapsed="0.000611"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.344178" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.343872" elapsed="0.000386"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.344939" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.344492" elapsed="0.000484"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.344291" elapsed="0.000733"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.343847" elapsed="0.001206"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.345826" 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-04-13T02:58:43.345250" elapsed="0.000613"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.346259" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.345960" elapsed="0.000376"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.346923" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.346576" elapsed="0.000373"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.346368" elapsed="0.000615"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.345935" elapsed="0.001069"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.347141" elapsed="0.000340"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:43.347949" 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-04-13T02:58:43.347634" 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-04-13T02:58:43.348113" elapsed="0.002349"/>
</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-04-13T02:58:43.334992" elapsed="0.015533"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:43.350721" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-13T02:58:43.350597" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.350578" elapsed="0.000234"/>
</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-04-13T02:58:43.350944" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:43.351014" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:43.353185" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:43.315128" elapsed="0.038085"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:43.353265" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:43.353416" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:43.313284" elapsed="0.040158"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.353924" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.353586" elapsed="0.000366"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.354892" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:43.354476" elapsed="0.000444"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:43.354967" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:43.355170" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:43.354155" elapsed="0.001041"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.355591" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.355339" elapsed="0.000314"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.359331" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.355794" elapsed="0.003565"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:43.376557" elapsed="0.000526"/>
</kw>
<msg time="2026-04-13T02:58:43.377139" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.376210" elapsed="0.000989"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.375832" elapsed="0.001443"/>
</kw>
<msg time="2026-04-13T02:58:43.377318" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.367611" elapsed="0.009752"/>
</kw>
<msg time="2026-04-13T02:58:43.377476" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.367295" elapsed="0.010207"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.377901" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.377689" elapsed="0.000237"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:43.377975" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:43.378223" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:43.378279" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:43.308840" elapsed="0.069464"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.378736" level="INFO">43</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.378464" elapsed="0.000317"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:43.379006" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:43.378852" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.378833" elapsed="0.000240"/>
</if>
<var name="${i}">43</var>
<status status="PASS" start="2026-04-13T02:58:43.308609" elapsed="0.070491"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:43.386288" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.385948" elapsed="0.000367"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.386362" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:43.386513" 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-04-13T02:58:43.385600" elapsed="0.000937"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.392955" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.392683" elapsed="0.000320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.393385" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.393142" elapsed="0.000285"/>
</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-04-13T02:58:43.406978" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:43.407279" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:43.407698" 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-04-13T02:58:43.395755" elapsed="0.012018"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.393516" elapsed="0.014360"/>
</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-04-13T02:58:43.408270" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.407937" elapsed="0.000474"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.393489" elapsed="0.014970"/>
</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-04-13T02:58:43.415863" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.410841" elapsed="0.005071"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.410287" elapsed="0.005659"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.410242" elapsed="0.005729"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.418383" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.416236" elapsed="0.002192"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.416028" elapsed="0.002435"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.416012" elapsed="0.002476"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.419092" 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-04-13T02:58:43.418691" elapsed="0.000428"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.419407" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.419189" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.419948" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.419635" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.419488" elapsed="0.000521"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.419171" elapsed="0.000859"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.420530" 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-04-13T02:58:43.420170" elapsed="0.000386"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.420858" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.420629" elapsed="0.000286"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.421375" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.421080" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.420938" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.420608" elapsed="0.000849"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.421597" elapsed="0.000363"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:43.422407" 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-04-13T02:58:43.422110" elapsed="0.000323"/>
</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-04-13T02:58:43.422580" elapsed="0.002409"/>
</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-04-13T02:58:43.409279" elapsed="0.015778"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:43.425239" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-13T02:58:43.425129" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.425110" 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-04-13T02:58:43.425464" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:43.425535" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:43.427772" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:43.386877" elapsed="0.040923"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:43.427854" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:43.428062" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:43.385059" elapsed="0.043030"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.428532" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.428234" elapsed="0.000328"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.429527" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:43.429123" elapsed="0.000432"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:43.429605" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:43.429783" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:43.428790" elapsed="0.001020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.430224" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.429972" elapsed="0.000297"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.434037" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.430405" elapsed="0.003661"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:43.451393" elapsed="0.000554"/>
</kw>
<msg time="2026-04-13T02:58:43.452013" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.451021" elapsed="0.001057"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.450571" elapsed="0.001584"/>
</kw>
<msg time="2026-04-13T02:58:43.452200" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.442370" elapsed="0.009875"/>
</kw>
<msg time="2026-04-13T02:58:43.452353" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.441989" elapsed="0.010389"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.452928" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.452527" elapsed="0.000428"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:43.453007" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:43.453203" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:43.453260" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:43.379462" elapsed="0.073823"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.453741" level="INFO">44</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.453461" elapsed="0.000325"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:43.454018" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:43.453863" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.453842" elapsed="0.000242"/>
</if>
<var name="${i}">44</var>
<status status="PASS" start="2026-04-13T02:58:43.379262" elapsed="0.074847"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:43.460296" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.459985" elapsed="0.000339"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.460373" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:43.460526" 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-04-13T02:58:43.459598" elapsed="0.000953"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.467068" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.466758" elapsed="0.000363"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.467530" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.467286" 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-04-13T02:58:43.483002" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:43.483186" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:43.483326" 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-04-13T02:58:43.469790" elapsed="0.013566"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.467671" elapsed="0.015772"/>
</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-04-13T02:58:43.483850" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.483480" elapsed="0.000516"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.467630" elapsed="0.016415"/>
</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-04-13T02:58:43.491900" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.486409" elapsed="0.005623"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.485926" elapsed="0.006195"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.485881" elapsed="0.006301"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.495157" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.492741" elapsed="0.002467"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.492320" elapsed="0.002925"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.492279" elapsed="0.002991"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.495942" 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-04-13T02:58:43.495452" elapsed="0.000519"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.496274" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.496047" elapsed="0.000286"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.496837" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.496502" elapsed="0.000363"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.496357" elapsed="0.000551"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.496027" elapsed="0.000904"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.497443" 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-04-13T02:58:43.497076" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.497781" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.497540" elapsed="0.000300"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.498316" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.498016" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.497865" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.497521" elapsed="0.000879"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.498547" elapsed="0.000376"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:43.499418" 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-04-13T02:58:43.499117" elapsed="0.000327"/>
</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-04-13T02:58:43.499669" elapsed="0.002488"/>
</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-04-13T02:58:43.484894" elapsed="0.017406"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:43.502491" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T02:58:43.502378" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.502358" 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-04-13T02:58:43.502744" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:43.502816" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:43.505094" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:43.460959" elapsed="0.044165"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:43.505178" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:43.505338" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:43.459036" elapsed="0.046328"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.505875" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.505519" elapsed="0.000385"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.507001" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:43.506559" elapsed="0.000471"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:43.507078" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:43.507238" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:43.506191" elapsed="0.001073"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.507732" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.507409" elapsed="0.000379"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.511491" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.507928" elapsed="0.003592"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:43.529631" elapsed="0.000561"/>
</kw>
<msg time="2026-04-13T02:58:43.530261" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.529235" elapsed="0.001092"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.528769" elapsed="0.001640"/>
</kw>
<msg time="2026-04-13T02:58:43.530454" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.520492" elapsed="0.010008"/>
</kw>
<msg time="2026-04-13T02:58:43.530610" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.520015" elapsed="0.010647"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.531032" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.530815" elapsed="0.000242"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:43.531109" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:58:43.531388" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:43.531444" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:43.454472" elapsed="0.076997"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.531892" level="INFO">45</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.531620" elapsed="0.000317"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:43.532246" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:43.532083" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.532055" elapsed="0.000263"/>
</if>
<var name="${i}">45</var>
<status status="PASS" start="2026-04-13T02:58:43.454263" elapsed="0.078082"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:43.538597" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.538260" elapsed="0.000371"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.538700" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T02:58:43.538864" 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-04-13T02:58:43.537918" elapsed="0.000970"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.545316" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.545034" elapsed="0.000332"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.545774" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.545508" elapsed="0.000308"/>
</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-04-13T02:58:43.559232" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:43.559412" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:43.559551" 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-04-13T02:58:43.547885" elapsed="0.011722"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.545897" 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-04-13T02:58:43.560259" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.559856" elapsed="0.000596"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.545872" elapsed="0.014632"/>
</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-04-13T02:58:43.568799" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.563102" elapsed="0.005824"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.562530" elapsed="0.006482"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.562480" elapsed="0.006594"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.571951" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.569670" elapsed="0.002333"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.569214" elapsed="0.002828"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.569174" elapsed="0.002894"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.572720" 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-04-13T02:58:43.572247" elapsed="0.000507"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.573120" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.572852" elapsed="0.000331"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.573686" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.573353" elapsed="0.000360"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.573207" elapsed="0.000542"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.572827" elapsed="0.000944"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.574279" 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-04-13T02:58:43.573913" elapsed="0.000393"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.574706" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.574466" elapsed="0.000298"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.575273" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.574955" elapsed="0.000345"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.574789" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.574447" elapsed="0.000911"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.575512" elapsed="0.000388"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:43.576361" 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-04-13T02:58:43.576053" 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-04-13T02:58:43.576580" elapsed="0.002805"/>
</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-04-13T02:58:43.561416" elapsed="0.018050"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:43.579700" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-13T02:58:43.579554" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.579528" elapsed="0.000450"/>
</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-04-13T02:58:43.580139" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:43.580211" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:43.582498" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:43.539218" elapsed="0.043311"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:43.582585" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:43.582766" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:43.537317" elapsed="0.045475"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.583274" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.582945" elapsed="0.000355"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.584314" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:43.583897" elapsed="0.000445"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:43.584391" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:43.584548" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:43.583521" elapsed="0.001053"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.585048" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.584782" elapsed="0.000312"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.588855" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.585232" elapsed="0.003656"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:43.606750" elapsed="0.000537"/>
</kw>
<msg time="2026-04-13T02:58:43.607442" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.606318" elapsed="0.001194"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.605792" elapsed="0.001801"/>
</kw>
<msg time="2026-04-13T02:58:43.607668" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.597439" elapsed="0.010278"/>
</kw>
<msg time="2026-04-13T02:58:43.607832" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.596962" elapsed="0.010895"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.608226" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.608008" elapsed="0.000244"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:43.608305" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:43.608506" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:43.608559" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:43.532752" elapsed="0.075837"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.609078" level="INFO">46</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.608760" elapsed="0.000365"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:43.609363" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:43.609205" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.609182" elapsed="0.000247"/>
</if>
<var name="${i}">46</var>
<status status="PASS" start="2026-04-13T02:58:43.532508" elapsed="0.076947"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:43.615844" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.615487" elapsed="0.000389"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.615933" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:43.616094" 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-04-13T02:58:43.615139" elapsed="0.000980"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.622784" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.622467" elapsed="0.000369"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.623223" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.622980" elapsed="0.000286"/>
</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-04-13T02:58:43.635290" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:43.635445" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:43.635571" 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-04-13T02:58:43.625450" elapsed="0.010228"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.623347" elapsed="0.012437"/>
</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-04-13T02:58:43.636176" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.635846" elapsed="0.000471"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.623323" elapsed="0.013043"/>
</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-04-13T02:58:43.644146" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.638754" elapsed="0.005505"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.638245" elapsed="0.006093"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.638197" elapsed="0.006308"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.648245" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.645223" elapsed="0.003071"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.644718" elapsed="0.003611"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.644625" elapsed="0.003728"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.648955" 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-04-13T02:58:43.648527" elapsed="0.000455"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.649281" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.649055" elapsed="0.000285"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.649876" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.649548" elapsed="0.000354"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.649364" elapsed="0.000574"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.649036" elapsed="0.000923"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.650464" 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-04-13T02:58:43.650101" elapsed="0.000390"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.650794" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.650561" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.651309" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.651017" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.650876" elapsed="0.000494"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.650544" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.651530" elapsed="0.000364"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:43.652344" 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-04-13T02:58:43.652045" elapsed="0.000326"/>
</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-04-13T02:58:43.652510" elapsed="0.002458"/>
</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-04-13T02:58:43.637180" elapsed="0.017856"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:43.655221" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T02:58:43.655111" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.655091" elapsed="0.000223"/>
</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-04-13T02:58:43.655450" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:43.655522" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:43.657779" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:43.616491" elapsed="0.041318"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:43.657862" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:43.658015" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:43.614506" elapsed="0.043535"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.658493" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.658188" elapsed="0.000332"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.659498" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:43.659096" elapsed="0.000430"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:43.659574" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:43.659820" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:43.658755" elapsed="0.001091"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.660255" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.659992" elapsed="0.000311"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.664249" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.660443" elapsed="0.003836"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:43.681716" elapsed="0.000555"/>
</kw>
<msg time="2026-04-13T02:58:43.682333" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.681332" elapsed="0.001065"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.680926" elapsed="0.001549"/>
</kw>
<msg time="2026-04-13T02:58:43.682520" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.672614" elapsed="0.009952"/>
</kw>
<msg time="2026-04-13T02:58:43.682705" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.672253" elapsed="0.010478"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.683092" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.682881" elapsed="0.000236"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:43.683169" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:43.683364" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:43.683418" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:43.609841" elapsed="0.073602"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.683864" level="INFO">47</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.683594" elapsed="0.000314"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:43.684131" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:43.683983" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.683962" elapsed="0.000234"/>
</if>
<var name="${i}">47</var>
<status status="PASS" start="2026-04-13T02:58:43.609608" elapsed="0.074612"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:43.690384" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.690076" elapsed="0.000335"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.690458" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:43.690610" 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-04-13T02:58:43.689725" elapsed="0.000912"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.697199" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.696919" elapsed="0.000330"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.697635" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.697390" elapsed="0.000303"/>
</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-04-13T02:58:43.709694" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:43.709884" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:43.710103" 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-04-13T02:58:43.699760" elapsed="0.010380"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.697769" elapsed="0.012467"/>
</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-04-13T02:58:43.710469" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.710273" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.697747" elapsed="0.012840"/>
</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-04-13T02:58:43.715232" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.712030" elapsed="0.003270"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.711739" elapsed="0.003608"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.711711" elapsed="0.003670"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.718761" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.715767" elapsed="0.003040"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.715459" elapsed="0.003381"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.715436" elapsed="0.003428"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.719419" 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-04-13T02:58:43.719026" elapsed="0.000420"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.719760" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.719516" elapsed="0.000303"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.720283" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.719988" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.719843" elapsed="0.000501"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.719497" elapsed="0.000868"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.720882" 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-04-13T02:58:43.720506" elapsed="0.000402"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.721189" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.720977" elapsed="0.000267"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.721717" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.721405" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.721267" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.720959" elapsed="0.000840"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.721937" elapsed="0.000343"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:43.722776" 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-04-13T02:58:43.722455" 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-04-13T02:58:43.723061" elapsed="0.002402"/>
</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-04-13T02:58:43.711119" elapsed="0.014414"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:43.725751" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-13T02:58:43.725620" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.725599" elapsed="0.000250"/>
</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-04-13T02:58:43.725985" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:43.726055" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:43.728288" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:43.690975" elapsed="0.037341"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:43.728369" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:43.728582" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:43.689181" elapsed="0.039428"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.729076" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.728772" elapsed="0.000331"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.730069" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:43.729664" elapsed="0.000433"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:43.730146" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:43.730302" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:43.729317" elapsed="0.001010"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.730776" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.730503" elapsed="0.000319"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.734516" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.730960" elapsed="0.003586"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:43.751678" elapsed="0.000499"/>
</kw>
<msg time="2026-04-13T02:58:43.752237" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.751313" elapsed="0.000985"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.750937" elapsed="0.001436"/>
</kw>
<msg time="2026-04-13T02:58:43.752417" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.742797" elapsed="0.009664"/>
</kw>
<msg time="2026-04-13T02:58:43.752564" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.742388" elapsed="0.010199"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.752967" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.752760" elapsed="0.000232"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:43.753041" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:43.753239" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:43.753292" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:43.684572" elapsed="0.068744"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.753733" level="INFO">48</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.753466" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:43.753997" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:43.753850" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.753830" elapsed="0.000234"/>
</if>
<var name="${i}">48</var>
<status status="PASS" start="2026-04-13T02:58:43.684368" elapsed="0.069720"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T02:58:43.760052" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.759744" elapsed="0.000334"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.760125" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:43.760274" 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-04-13T02:58:43.759393" elapsed="0.000905"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.766632" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.766378" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.767127" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.766838" elapsed="0.000332"/>
</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-04-13T02:58:43.779567" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09mynh7nof0fbois5g5cole9h1.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T02:58:43.779847" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T02:58:43.780084" 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-04-13T02:58:43.769179" elapsed="0.010962"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.767242" elapsed="0.013002"/>
</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-04-13T02:58:43.780692" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.780308" elapsed="0.000529"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.767221" elapsed="0.013664"/>
</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-04-13T02:58:43.788137" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.783263" elapsed="0.004927"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.782723" elapsed="0.005503"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.782676" elapsed="0.005575"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.790848" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.788532" elapsed="0.002363"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.788316" elapsed="0.002613"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.788295" elapsed="0.002658"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.791537" 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-04-13T02:58:43.791121" elapsed="0.000445"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.791875" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.791652" elapsed="0.000281"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.792402" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.792102" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.791957" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.791618" elapsed="0.000868"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.793008" 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-04-13T02:58:43.792631" elapsed="0.000404"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.793317" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.793103" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.793862" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.793542" elapsed="0.000346"/>
</kw>
<status status="PASS" start="2026-04-13T02:58:43.793399" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.793085" elapsed="0.000860"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.794086" elapsed="0.000342"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T02:58:43.794888" 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-04-13T02:58:43.794578" 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-04-13T02:58:43.795054" elapsed="0.002460"/>
</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-04-13T02:58:43.781721" elapsed="0.015949"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T02:58:43.797865" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T02:58:43.797752" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.797729" elapsed="0.000230"/>
</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-04-13T02:58:43.798103" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T02:58:43.798176" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T02:58:43.800432" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T02:58:43.760705" elapsed="0.039756"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T02:58:43.800514" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:58:43.800692" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T02:58:43.758856" elapsed="0.041863"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.801181" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.800868" elapsed="0.000340"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.802198" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T02:58:43.801791" elapsed="0.000436"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T02:58:43.802275" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:43.802436" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T02:58:43.801422" elapsed="0.001041"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.802885" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.802607" elapsed="0.000325"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.806636" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.803072" elapsed="0.003605"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:43.823774" elapsed="0.000503"/>
</kw>
<msg time="2026-04-13T02:58:43.824340" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.823343" elapsed="0.001059"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.822940" elapsed="0.001540"/>
</kw>
<msg time="2026-04-13T02:58:43.824525" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.814811" elapsed="0.009760"/>
</kw>
<msg time="2026-04-13T02:58:43.824709" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.814462" elapsed="0.010273"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.825093" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.824882" elapsed="0.000236"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:43.825168" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:43.825428" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T02:58:43.825482" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T02:58:43.754438" elapsed="0.071069"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.825928" level="INFO">49</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.825680" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T02:58:43.826194" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T02:58:43.826048" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.826027" elapsed="0.000232"/>
</if>
<var name="${i}">49</var>
<status status="PASS" start="2026-04-13T02:58:43.754243" elapsed="0.072040"/>
</iter>
<var>${i}</var>
<value>${itr}</value>
<status status="PASS" start="2026-04-13T02:58:40.023510" elapsed="3.802806"/>
</for>
<return>
<value>${sts}</value>
<value>${op}</value>
<status status="PASS" start="2026-04-13T02:58:43.826361" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:58:43.826547" level="INFO">${sts1} = connecting</msg>
<msg time="2026-04-13T02:58:43.826600" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts1}</var>
<var>${output}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Verify if a netconf endpoint status is connected by running in a loop</doc>
<status status="PASS" start="2026-04-13T02:58:40.023213" elapsed="3.803416"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.828652" level="INFO">${ep} = CONTROLLER1</msg>
<var>${ep}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.826792" elapsed="0.001887"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.832300" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.828822" elapsed="0.003506"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T02:58:43.850940" elapsed="0.000436"/>
</kw>
<msg time="2026-04-13T02:58:43.851437" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.850572" elapsed="0.000922"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return port if vanadium is at least ${lower_bound},
return netconf-node-topology:port otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.850191" elapsed="0.001417"/>
</kw>
<msg time="2026-04-13T02:58:43.851675" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.842039" elapsed="0.009683"/>
</kw>
<msg time="2026-04-13T02:58:43.851829" level="INFO">${portKey} = port</msg>
<var>${portKey}</var>
<arg>port</arg>
<arg>netconf-node-topology:port</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T02:58:43.841679" elapsed="0.010175"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.852233" level="INFO">${port} = 1830</msg>
<var>${port}</var>
<arg>${node}</arg>
<arg>${portKey}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.852021" elapsed="0.000237"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.852724" level="INFO">${port} = 1830</msg>
<var>${port}</var>
<arg>${port}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T02:58:43.852399" elapsed="0.000351"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${endpoint}</arg>
<arg>${ep}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-13T02:58:43.852891" elapsed="0.000310"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${port}</arg>
<arg>${NETCONF_PORT}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-13T02:58:43.853342" elapsed="0.000320"/>
</kw>
<arg>${NETCONF_EP_NAME}</arg>
<arg>${THIRD_CONTROLLER_INDEX}</arg>
<doc>Verify if a netconf endpoint is mounted</doc>
<status status="PASS" start="2026-04-13T02:58:40.022733" elapsed="3.830991"/>
</kw>
<doc>schedule a basic export/backup on a cluster, with controller mounting itself as a netconf device</doc>
<tag>create backup</tag>
<status status="PASS" start="2026-04-13T02:58:28.788819" elapsed="15.065028"/>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-13T02:58:43.854763" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-13T02:58:43.854680" elapsed="0.000347"/>
</kw>
<doc>Test suite for verifying basic export with a netconf mount on a cluster</doc>
<status status="PASS" start="2026-04-13T02:58:28.691551" elapsed="15.163511"/>
</suite>
<suite id="s1-s4" name="130-Cluster-Import-Basic" source="/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/suites/daexim/130-cluster-import-basic.robot">
<kw name="ClusterManagement_Setup" owner="ClusterManagement" type="SETUP">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.931547" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-13T02:58:43.927803" elapsed="0.003777"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-13T02:58:43.931827" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:43.931698" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:43.931672" elapsed="0.000225"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.932451" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:58:43.932045" elapsed="0.000449"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.933076" 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-04-13T02:58:43.932665" elapsed="0.000441"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:43.933670" elapsed="0.000290"/>
</kw>
<msg time="2026-04-13T02:58:43.934058" level="INFO">${status} = PASS</msg>
<msg time="2026-04-13T02:58:43.934104" 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 error.</doc>
<status status="PASS" start="2026-04-13T02:58:43.933276" elapsed="0.000851"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.934673" 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-04-13T02:58:43.934281" elapsed="0.000420"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.935752" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:58:43.935463" elapsed="0.000315"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.936234" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:58:43.935932" elapsed="0.000329"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.936727" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.936407" elapsed="0.000357"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.940053" elapsed="0.000215"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.940774" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.940418" elapsed="0.000382"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.940941" elapsed="0.000253"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.941973" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.941673" elapsed="0.000326"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.942048" elapsed="0.000038"/>
</return>
<msg time="2026-04-13T02:58:43.942214" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-13T02:58:43.941377" elapsed="0.000862"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:43.942842" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.156:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7fe770669b50&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-13T02:58:43.942382" elapsed="0.000596"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.943141" elapsed="0.000196"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-13T02:58:43.939460" elapsed="0.003938"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-13T02:58:43.939266" elapsed="0.004194"/>
</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-04-13T02:58:43.944410" elapsed="0.000204"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.945253" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.944802" elapsed="0.000482"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.945433" elapsed="0.000244"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.946657" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.946136" elapsed="0.000550"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.946733" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:43.946890" 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-04-13T02:58:43.945856" elapsed="0.001058"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:43.947490" level="INFO">Creating Session using : alias=ClusterManagement__session_2, url=http://10.30.170.138:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7fe7721cc250&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-13T02:58:43.947054" elapsed="0.000642"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.947849" elapsed="0.000194"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-13T02:58:43.943791" elapsed="0.004313"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-13T02:58:43.943574" elapsed="0.004574"/>
</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-04-13T02:58:43.948973" elapsed="0.000238"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.949709" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.949358" elapsed="0.000378"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.949873" elapsed="0.000219"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.950861" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.950547" elapsed="0.000340"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.950934" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:43.951090" 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-04-13T02:58:43.950268" elapsed="0.000855"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:43.951722" level="INFO">Creating Session using : alias=ClusterManagement__session_3, url=http://10.30.171.185:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7fe772302b90&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-13T02:58:43.951267" elapsed="0.000569"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.951985" elapsed="0.000191"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-13T02:58:43.948406" elapsed="0.003828"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-13T02:58:43.948235" elapsed="0.004044"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-04-13T02:58:43.936852" elapsed="0.015458"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.952853" level="INFO">${ClusterManagement__member_index_list} = [1, 2, 3]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:58:43.952468" elapsed="0.000430"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.953454" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.156', 2: '10.30.170.138', 3: '10.30.171.185'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:58:43.953047" elapsed="0.000450"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.954004" 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 a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-13T02:58:43.953662" elapsed="0.000385"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.934946" elapsed="0.019159"/>
</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-04-13T02:58:43.927396" elapsed="0.026769"/>
</kw>
<test id="s1-s4-t1" name="Create Basic Import" line="11">
<kw name="Cleanup Cluster Export Files" owner="DaeximKeywords">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.957923" 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-04-13T02:58:43.957493" elapsed="0.000458"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.958399" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:58:43.958096" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-13T02:58:43.958471" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:58:43.958653" 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-04-13T02:58:43.957082" elapsed="0.001597"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.959803" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:43.959468" elapsed="0.000363"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.971949" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:43.971586" elapsed="0.000394"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:43.972036" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T02:58:43.972200" 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-04-13T02:58:43.971232" elapsed="0.000993"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.975264" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.974992" elapsed="0.000321"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:43.979367" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:58:43.978459" elapsed="0.002021">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:58:43.975394" elapsed="0.005355">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.981048" elapsed="0.000078"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:43.980790" elapsed="0.000408"/>
</branch>
<status status="FAIL" start="2026-04-13T02:58:43.975371" elapsed="0.005900">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:58:43.982056" elapsed="0.000067"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:43.982176" elapsed="0.000061"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:58:43.972499" elapsed="0.009966">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:43.982562" elapsed="0.000059"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-13T02:58:43.970765" elapsed="0.012115">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:43.983266" elapsed="0.000071"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:43.983394" elapsed="0.000017"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:58:43.968392" elapsed="0.015153">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:43.959977" elapsed="0.023722"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:43.985914" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.985531" elapsed="0.000412"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:43.986733" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:43.990981" elapsed="0.000471"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.992676" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:43.991670" elapsed="0.001092"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:43.993780" level="INFO">${conn_id} = 230</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:43.992970" elapsed="0.000851"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:43.995949" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:43.996127" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:43.995231" elapsed="0.001001"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.996962" elapsed="0.000769"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:43.999763" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:44.365595" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:33 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:43.999408" elapsed="0.366461"/>
</kw>
<msg time="2026-04-13T02:58:44.366151" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.998455" elapsed="0.367908"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:43.994114" elapsed="0.372662"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:44.368105" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:44.391820" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:44.392299" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:44.392528" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:44.367354" elapsed="0.025321"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:44.393394" elapsed="0.000661"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:44.395510" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:44.394716" elapsed="0.000914"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:44.396147" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:44.395852" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:44.395813" elapsed="0.000535"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:44.396698" elapsed="0.000045"/>
</return>
<status status="PASS" start="2026-04-13T02:58:44.396426" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:44.396404" elapsed="0.000522"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:44.396976" elapsed="0.000020"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:44.401433" elapsed="0.001229"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:44.403022" elapsed="0.000652"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:44.403909" elapsed="0.000310"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:44.397410" elapsed="0.006900"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:43.988991" elapsed="0.415415"/>
</kw>
<msg time="2026-04-13T02:58:44.404526" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.988045" elapsed="0.416542"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:43.987501" elapsed="0.417185"/>
</kw>
<msg time="2026-04-13T02:58:44.404738" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:43.987004" elapsed="0.417798"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:44.407518" elapsed="0.000342"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:44.408013" elapsed="0.000151"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:44.408338" 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-04-13T02:58:44.405094" elapsed="0.003413"/>
</kw>
<msg time="2026-04-13T02:58:44.408623" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:43.986150" elapsed="0.422519"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:44.409101" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:44.408846" elapsed="0.000296"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:44.409188" elapsed="0.000033"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:43.984875" elapsed="0.424445"/>
</kw>
<msg time="2026-04-13T02:58:44.409409" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:43.983971" elapsed="0.425462"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:44.410830" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:44.410500" elapsed="0.000357"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:44.411593" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:44.415732" elapsed="0.000358"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:44.417303" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:44.416285" elapsed="0.001104"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:44.418337" level="INFO">${conn_id} = 233</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:44.417590" elapsed="0.000788"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:44.420678" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:44.420859" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:44.419846" elapsed="0.001119"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:44.421695" elapsed="0.000637"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:44.424513" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:44.740548" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:44 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:44.424186" elapsed="0.316634"/>
</kw>
<msg time="2026-04-13T02:58:44.741031" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:44.423246" elapsed="0.317931"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:44.418740" elapsed="0.322644"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:44.742560" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:44.756179" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:44.756580" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:44.756807" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:44.741810" elapsed="0.015089"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:44.757533" elapsed="0.000641"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:44.760188" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:44.758824" elapsed="0.001557"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:44.761283" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:44.760760" elapsed="0.000804"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:44.760692" elapsed="0.000983"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:44.762236" elapsed="0.000133"/>
</return>
<status status="PASS" start="2026-04-13T02:58:44.761815" elapsed="0.000808"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:44.761778" elapsed="0.000941"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:44.762770" elapsed="0.000020"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:44.770936" elapsed="0.001979"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:44.773510" elapsed="0.001213"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:44.775317" elapsed="0.000554"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:44.763246" elapsed="0.012729"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:44.413615" elapsed="0.362480"/>
</kw>
<msg time="2026-04-13T02:58:44.776170" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:44.412933" elapsed="0.363335"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:44.412355" elapsed="0.364008"/>
</kw>
<msg time="2026-04-13T02:58:44.776410" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:44.411883" elapsed="0.364577"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:44.779724" elapsed="0.000372"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:44.780253" elapsed="0.000159"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:44.780547" elapsed="0.000199"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:44.776858" elapsed="0.003943"/>
</kw>
<msg time="2026-04-13T02:58:44.780909" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:44.411060" elapsed="0.369874"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:44.781523" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:44.781251" elapsed="0.000314"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:44.781623" elapsed="0.000089"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:44.410083" elapsed="0.371745"/>
</kw>
<msg time="2026-04-13T02:58:44.781922" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:44.409587" elapsed="0.372360"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:44.782964" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:44.782664" elapsed="0.000326"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:44.783829" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:44.787241" elapsed="0.000256"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:44.788136" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:44.787651" elapsed="0.000532"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:44.788769" level="INFO">${conn_id} = 236</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:44.788327" elapsed="0.000468"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:44.789969" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:44.790094" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:44.789413" elapsed="0.000705"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:44.790286" elapsed="0.000749"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:44.792988" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:45.121793" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:44 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:44.792413" elapsed="0.329858"/>
</kw>
<msg time="2026-04-13T02:58:45.122559" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:44.791249" elapsed="0.331695"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:44.789000" elapsed="0.334301"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:45.124451" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:58:45.137257" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:45.137436" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:58:45.137506" 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-04-13T02:58:45.123907" elapsed="0.013634"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:45.137807" elapsed="0.000338"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.139148" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:45.138461" elapsed="0.000785"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:45.139773" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:45.139426" elapsed="0.000470"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:45.139374" elapsed="0.000583"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:45.140414" elapsed="0.000064"/>
</return>
<status status="PASS" start="2026-04-13T02:58:45.140108" elapsed="0.000449"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:45.140047" elapsed="0.000563"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:45.140730" elapsed="0.000034"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.156577" elapsed="0.000604"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:45.157339" elapsed="0.000196"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:45.157852" elapsed="0.000107"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:45.141469" elapsed="0.016547"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:44.786134" elapsed="0.371978"/>
</kw>
<msg time="2026-04-13T02:58:45.158175" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:44.785503" elapsed="0.372731"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:44.784972" elapsed="0.373344"/>
</kw>
<msg time="2026-04-13T02:58:45.158363" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:44.784108" elapsed="0.374307"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.161135" 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-04-13T02:58:45.161612" elapsed="0.000393"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:45.162165" elapsed="0.000104"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:45.158783" elapsed="0.003539"/>
</kw>
<msg time="2026-04-13T02:58:45.162416" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:44.783200" elapsed="0.379247"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.163003" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:45.162701" elapsed="0.000357"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:45.163104" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:45.163272" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:44.782189" elapsed="0.381174"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.163818" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:45.163520" elapsed="0.000350"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:45.164009" elapsed="0.000349"/>
</kw>
<arg>${index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:58:43.959154" elapsed="1.205270"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-13T02:58:43.958941" elapsed="1.205517"/>
</iter>
<iter>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.165495" level="INFO">${host_index} = 2</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:45.165162" elapsed="0.000360"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.177293" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:45.176976" elapsed="0.000345"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:45.177369" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:58:45.177523" 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-04-13T02:58:45.176605" elapsed="0.000944"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.180791" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:45.180503" elapsed="0.000336"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:45.183549" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:58:45.183102" elapsed="0.001317">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:58:45.181092" elapsed="0.003412">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:45.184707" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:45.184539" elapsed="0.000232"/>
</branch>
<status status="FAIL" start="2026-04-13T02:58:45.181067" elapsed="0.003729">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:58:45.185168" elapsed="0.000026"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:45.185245" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:58:45.177837" elapsed="0.007529">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:45.185426" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 2.</doc>
<status status="FAIL" start="2026-04-13T02:58:45.176230" elapsed="0.009293">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:45.185707" elapsed="0.000023"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:45.185783" elapsed="0.000015"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:58:45.174013" elapsed="0.011866">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:45.165888" elapsed="0.020052"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:45.187270" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:45.186990" elapsed="0.000369"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:45.188163" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:45.192128" elapsed="0.000356"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.193767" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:45.192724" elapsed="0.001129"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:45.194858" 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-04-13T02:58:45.194068" elapsed="0.000833"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.197170" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:45.197347" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:45.196603" elapsed="0.000852"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.198210" elapsed="0.000707"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:45.200855" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:45.540735" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:39 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:45.200491" elapsed="0.340417"/>
</kw>
<msg time="2026-04-13T02:58:45.541060" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.199786" elapsed="0.341389"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:45.195415" elapsed="0.345935"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:45.542094" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:45.566254" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:45.566534" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:45.566724" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:45.541706" elapsed="0.025087"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:45.567255" elapsed="0.000436"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.568896" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:45.568054" elapsed="0.000962"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:45.569554" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:45.569227" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:45.569186" elapsed="0.000608"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:45.570301" elapsed="0.000064"/>
</return>
<status status="PASS" start="2026-04-13T02:58:45.569882" elapsed="0.000684"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:45.569854" elapsed="0.000778"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:45.570761" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.576374" elapsed="0.001050"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:45.577792" elapsed="0.000604"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:45.578748" elapsed="0.000421"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:45.571359" elapsed="0.007938"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:45.190144" elapsed="0.389263"/>
</kw>
<msg time="2026-04-13T02:58:45.579468" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.189465" elapsed="0.390068"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:45.188944" elapsed="0.390674"/>
</kw>
<msg time="2026-04-13T02:58:45.579750" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.188443" elapsed="0.391376"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.584984" elapsed="0.000450"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:45.585632" elapsed="0.000219"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:45.586019" elapsed="0.000132"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:45.580222" elapsed="0.005994"/>
</kw>
<msg time="2026-04-13T02:58:45.586327" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:45.187574" elapsed="0.398783"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.587052" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:45.586574" elapsed="0.000534"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:45.587166" elapsed="0.000047"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:45.186514" elapsed="0.400817"/>
</kw>
<msg time="2026-04-13T02:58:45.587431" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:45.186086" elapsed="0.401374"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:45.589053" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:45.588770" elapsed="0.000310"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:45.589865" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:45.594253" elapsed="0.000606"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.596795" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:45.595161" elapsed="0.001757"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:45.598194" level="INFO">${conn_id} = 242</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:45.597218" elapsed="0.001019"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.600309" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:45.600489" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:45.599745" elapsed="0.000855"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.601381" elapsed="0.000881"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:45.604665" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:45.951960" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:45 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:45.604219" elapsed="0.347959"/>
</kw>
<msg time="2026-04-13T02:58:45.952375" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.603270" elapsed="0.349258"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:45.598543" elapsed="0.354241"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:45.953781" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:45.967521" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:45.967834" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:45.967957" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:45.953219" elapsed="0.014803"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:45.968470" elapsed="0.000465"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.970326" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:45.969351" elapsed="0.001153"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:45.971163" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:45.970785" elapsed="0.000572"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:45.970735" elapsed="0.000669"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:45.971822" elapsed="0.000055"/>
</return>
<status status="PASS" start="2026-04-13T02:58:45.971499" elapsed="0.000548"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:45.971472" elapsed="0.000623"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:45.972155" elapsed="0.000026"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.976974" elapsed="0.000890"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:45.978122" elapsed="0.000491"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:45.978870" elapsed="0.000360"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:45.972798" elapsed="0.006530"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:45.592086" elapsed="0.387341"/>
</kw>
<msg time="2026-04-13T02:58:45.979565" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.591377" elapsed="0.388257"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:45.590809" elapsed="0.388961"/>
</kw>
<msg time="2026-04-13T02:58:45.979815" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.590308" elapsed="0.389555"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.982730" elapsed="0.000355"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:45.983283" elapsed="0.000209"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:45.983703" elapsed="0.000134"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:45.980164" elapsed="0.003745"/>
</kw>
<msg time="2026-04-13T02:58:45.984037" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:45.589285" elapsed="0.394786"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.984681" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:45.984318" elapsed="0.000426"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:45.984806" elapsed="0.000046"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:45.588335" elapsed="0.396651"/>
</kw>
<msg time="2026-04-13T02:58:45.985106" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:45.587820" elapsed="0.397319"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:45.986503" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:45.986139" elapsed="0.000402"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:45.987570" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:45.991007" elapsed="0.000264"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.991908" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:45.991408" elapsed="0.000549"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:45.992540" 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-04-13T02:58:45.992103" elapsed="0.000464"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:45.993821" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:45.993952" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:45.993234" elapsed="0.000743"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.994152" elapsed="0.000726"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:45.997134" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:46.301736" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:45 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:45.996536" elapsed="0.305471"/>
</kw>
<msg time="2026-04-13T02:58:46.302150" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.995097" elapsed="0.307223"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:45.992794" elapsed="0.309701"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:46.303043" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:58:46.315118" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:46.315365" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:58:46.315465" 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-04-13T02:58:46.302770" elapsed="0.012746"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:46.315892" elapsed="0.000460"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:46.317411" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:46.316743" elapsed="0.000762"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:46.318424" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:46.317987" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:46.317631" elapsed="0.000953"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:46.319030" elapsed="0.000068"/>
</return>
<status status="PASS" start="2026-04-13T02:58:46.318783" elapsed="0.000389"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:46.318746" elapsed="0.000480"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:46.319300" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:46.335496" 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-04-13T02:58:46.336346" elapsed="0.000174"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:46.336672" elapsed="0.000101"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:46.320026" elapsed="0.016803"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:45.989884" elapsed="0.347036"/>
</kw>
<msg time="2026-04-13T02:58:46.336983" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.988900" elapsed="0.348138"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:45.988364" elapsed="0.348754"/>
</kw>
<msg time="2026-04-13T02:58:46.337164" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:45.987872" elapsed="0.349337"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:46.340455" elapsed="0.000345"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:46.340951" elapsed="0.000151"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:46.341236" 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-04-13T02:58:46.337493" elapsed="0.003892"/>
</kw>
<msg time="2026-04-13T02:58:46.341478" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:45.986860" elapsed="0.354725"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:46.342246" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:46.341785" elapsed="0.000514"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:46.342345" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:58:46.342504" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:45.985453" elapsed="0.357077"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:46.342950" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:46.342704" elapsed="0.000297"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:46.343169" elapsed="0.000311"/>
</kw>
<arg>${index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:58:45.164813" elapsed="1.178730"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-13T02:58:45.164573" elapsed="1.179002"/>
</iter>
<iter>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T02:58:46.344566" level="INFO">${host_index} = 3</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T02:58:46.344258" elapsed="0.000335"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:46.356785" 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 variables.</doc>
<status status="PASS" start="2026-04-13T02:58:46.356408" elapsed="0.000409"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T02:58:46.356876" elapsed="0.000055"/>
</return>
<msg time="2026-04-13T02:58:46.357060" 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-04-13T02:58:46.356050" elapsed="0.001036"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:46.360490" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:46.360231" elapsed="0.000306"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-13T02:58:46.363118" level="FAIL">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-13T02:58:46.362661" elapsed="0.001041">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<status status="FAIL" start="2026-04-13T02:58:46.360614" elapsed="0.003175">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:46.363958" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:46.363822" elapsed="0.000197"/>
</branch>
<status status="FAIL" start="2026-04-13T02:58:46.360592" elapsed="0.003452">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</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="NOT RUN" start="2026-04-13T02:58:46.364409" elapsed="0.000025"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:46.364482" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-13T02:58:46.357356" elapsed="0.007234">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:46.364759" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 3.</doc>
<status status="FAIL" start="2026-04-13T02:58:46.355670" elapsed="0.009193">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:46.365029" elapsed="0.000022"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T02:58:46.365102" elapsed="0.000015"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-13T02:58:46.353234" elapsed="0.011964">InvalidSchema: No connection adapters were found for 'network-topology:network-topology/topology'</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:46.344753" elapsed="0.020507"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:46.366532" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:46.366259" elapsed="0.000300"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:46.367497" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:46.371316" elapsed="0.000363"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:46.372946" level="INFO">Attempting to execute command "sudo rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:46.371872" elapsed="0.001159"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:46.373989" level="INFO">${conn_id} = 248</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:46.373229" elapsed="0.000800"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:46.376194" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:46.376364" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:46.375652" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:46.377210" elapsed="0.000656"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:46.379810" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:46.702488" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:32 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:46.379472" elapsed="0.323232"/>
</kw>
<msg time="2026-04-13T02:58:46.702879" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:46.378766" elapsed="0.324240"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:46.374366" elapsed="0.328922"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:46.704150" level="INFO">Executing command 'sudo rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:46.738387" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:46.738807" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:46.738902" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:46.703685" elapsed="0.035273"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:46.739378" elapsed="0.000440"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:46.740960" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:46.740129" elapsed="0.000951"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:46.741635" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:46.741320" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:46.741248" elapsed="0.000624"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:46.742213" elapsed="0.000050"/>
</return>
<status status="PASS" start="2026-04-13T02:58:46.741956" elapsed="0.000452"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:46.741932" elapsed="0.000520"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:46.742507" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:46.746852" elapsed="0.001131"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:46.748337" elapsed="0.000694"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:46.749376" elapsed="0.000450"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:46.742983" elapsed="0.006977"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:46.369433" elapsed="0.380663"/>
</kw>
<msg time="2026-04-13T02:58:46.750177" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:46.368789" elapsed="0.381468"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:46.368258" elapsed="0.382118"/>
</kw>
<msg time="2026-04-13T02:58:46.750435" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:46.367784" elapsed="0.382719"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:46.754581" elapsed="0.000464"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:46.755257" elapsed="0.000206"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:46.755679" elapsed="0.000142"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:46.750925" elapsed="0.004973"/>
</kw>
<msg time="2026-04-13T02:58:46.756029" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:46.366922" elapsed="0.389144"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:46.756752" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:46.756300" elapsed="0.000516"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:46.756877" elapsed="0.000041"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:46.365843" elapsed="0.391212"/>
</kw>
<msg time="2026-04-13T02:58:46.757184" level="INFO">${output1} = ('PASS', '')</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:46.365404" elapsed="0.391817"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:46.759006" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:46.758603" elapsed="0.000440"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:46.760190" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:46.765621" elapsed="0.000495"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:46.767823" level="INFO">Attempting to execute command "rm -rf /tmp/karaf-0.24.0/daexim;clear" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:46.766394" elapsed="0.001547"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:46.769483" level="INFO">${conn_id} = 251</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:46.768418" elapsed="0.001164"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:46.771703" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:46.771877" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:46.770976" elapsed="0.001007"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:46.772770" elapsed="0.000614"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:46.775189" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:47.094150" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:46 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:46.774869" elapsed="0.319443"/>
</kw>
<msg time="2026-04-13T02:58:47.094476" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:46.774153" elapsed="0.320444"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:46.769897" elapsed="0.324899"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:47.095519" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0/daexim;clear'.</msg>
<msg time="2026-04-13T02:58:47.108288" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T02:58:47.108677" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:47.108837" level="INFO">${stderr} = TERM environment variable not set.</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T02:58:47.095145" elapsed="0.013774"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:47.109451" elapsed="0.000511"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.111749" level="INFO">TERM environment variable not set.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:47.110438" elapsed="0.001492"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:47.112745" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:47.112225" elapsed="0.000692"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:47.112170" elapsed="0.000787"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:47.113299" elapsed="0.000046"/>
</return>
<status status="PASS" start="2026-04-13T02:58:47.113039" elapsed="0.000557"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:47.113016" elapsed="0.000651"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:47.113722" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:47.118194" elapsed="0.001154"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:47.119729" elapsed="0.000634"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:47.120766" elapsed="0.000308"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:47.114188" elapsed="0.006977"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:46.763052" elapsed="0.358207"/>
</kw>
<msg time="2026-04-13T02:58:47.121315" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:46.762143" elapsed="0.359228"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:46.761318" elapsed="0.360133"/>
</kw>
<msg time="2026-04-13T02:58:47.121491" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:46.760572" elapsed="0.360963"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:47.124214" elapsed="0.000327"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:47.124705" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:47.124982" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:47.121894" elapsed="0.003235"/>
</kw>
<msg time="2026-04-13T02:58:47.125224" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:46.759411" elapsed="0.365838"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.125722" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:47.125421" elapsed="0.000347"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:47.125810" elapsed="0.000029"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:46.758061" elapsed="0.367874"/>
</kw>
<msg time="2026-04-13T02:58:47.126022" level="INFO">${output2} = ('PASS', '')</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-13T02:58:46.757460" elapsed="0.368586"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:47.126933" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:47.126660" elapsed="0.000300"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:47.127693" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:47.130905" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.131837" level="INFO">Attempting to execute command "ls -lart /tmp/karaf-0.24.0" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:47.131342" elapsed="0.000542"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:47.132485" level="INFO">${conn_id} = 254</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:47.132051" elapsed="0.000465"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.133748" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:47.133874" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:47.133208" elapsed="0.000690"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:47.134068" elapsed="0.000696"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:47.136746" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:47.449745" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:47 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:47.136122" elapsed="0.313904"/>
</kw>
<msg time="2026-04-13T02:58:47.450166" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:47.134980" elapsed="0.315361"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:47.132789" elapsed="0.317725"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:47.451024" level="INFO">Executing command 'ls -lart /tmp/karaf-0.24.0'.</msg>
<msg time="2026-04-13T02:58:47.463401" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:47.463674" level="INFO">${stdout} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<msg time="2026-04-13T02:58:47.463751" 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-04-13T02:58:47.450762" elapsed="0.013028"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:47.464043" elapsed="0.000428"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.465416" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:47.464827" elapsed="0.000667"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:47.465905" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:47.465666" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:47.465593" elapsed="0.000432"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:47.466277" elapsed="0.000052"/>
</return>
<status status="PASS" start="2026-04-13T02:58:47.466111" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:47.466086" elapsed="0.000339"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:47.466484" elapsed="0.000023"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:47.483470" 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-04-13T02:58:47.484355" elapsed="0.000186"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:47.484700" elapsed="0.000118"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:47.467035" elapsed="0.017839"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:47.129885" elapsed="0.355087"/>
</kw>
<msg time="2026-04-13T02:58:47.485048" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:47.128992" elapsed="0.356129"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:47.128428" elapsed="0.356843"/>
</kw>
<msg time="2026-04-13T02:58:47.485318" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:47.127959" elapsed="0.357417"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:47.488214" 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-04-13T02:58:47.488722" elapsed="0.000193"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:47.489110" elapsed="0.000143"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:47.485803" elapsed="0.003529"/>
</kw>
<msg time="2026-04-13T02:58:47.489462" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:47.127158" elapsed="0.362340"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.490378" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:47.490027" elapsed="0.000418"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:47.490507" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T02:58:47.490741" level="INFO">${output} = total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenk...</msg>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:47.126263" elapsed="0.364517"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.491317" level="INFO">total 72
drwxrwxr-x 14 jenkins jenkins  4096 Apr 13 00:52 system
drwxrwxr-x  6 jenkins jenkins  4096 Apr 13 00:52 lib
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 00:52 deploy
-rw-rw-r--  1 jenkins jenkins  2518 Apr 13 00:52 README.md
-rw-rw-r--  1 jenkins jenkins 11266 Apr 13 00:52 LICENSE
-rw-rw-r--  1 jenkins jenkins  1117 Apr 13 00:52 CONTRIBUTING.md
-rw-rw-r--  1 jenkins jenkins     4 Apr 13 02:53 karaf.pid
-rw-rw-r--  1 jenkins jenkins     0 Apr 13 02:53 lock
drwxrwxr-x  2 jenkins jenkins  4096 Apr 13 02:53 instances
drwxrwxr-x  4 jenkins jenkins  4096 Apr 13 02:54 etc
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 bin
drwxrwxr-x  3 jenkins jenkins  4096 Apr 13 02:54 cache
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 state
drwxrwxr-x  5 jenkins jenkins  4096 Apr 13 02:54 configuration
drwxrwxr-x  9 jenkins jenkins  4096 Apr 13 02:54 data
drwxrwxrwt 14 root    root     4096 Apr 13 02:57 ..
drwxrwxr-x 12 jenkins jenkins  4096 Apr 13 02:58 .</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:47.490981" elapsed="0.000454"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T02:58:47.491622" elapsed="0.000440"/>
</kw>
<arg>${index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="PASS" start="2026-04-13T02:58:46.343949" elapsed="1.148212"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-13T02:58:46.343742" elapsed="1.148483"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-13T02:58:43.958738" elapsed="3.533548"/>
</for>
<doc>This keyword cleansup export files of a cluster</doc>
<status status="PASS" start="2026-04-13T02:58:43.954977" elapsed="3.537408"/>
</kw>
<kw name="Stop_Members_From_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.499719" 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-04-13T02:58:47.499098" elapsed="0.000665"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.500448" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:58:47.499987" elapsed="0.000501"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-13T02:58:47.500555" elapsed="0.000047"/>
</return>
<msg time="2026-04-13T02:58:47.500819" level="INFO">${stop_index_list} = [1, 2, 3]</msg>
<var>${stop_index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-13T02:58:47.498360" elapsed="0.002498"/>
</kw>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.504994" 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-04-13T02:58:47.502987" elapsed="0.002116"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.507583" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:58:47.505995" elapsed="0.001628"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-13T02:58:47.507937" elapsed="0.000128"/>
</return>
<msg time="2026-04-13T02:58:47.508560" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${original_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-13T02:58:47.501267" elapsed="0.007395"/>
</kw>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.510885" 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-04-13T02:58:47.510448" elapsed="0.000465"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.511370" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:58:47.511060" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-13T02:58:47.511441" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:47.511623" 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-04-13T02:58:47.510071" elapsed="0.001593"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:47.512721" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:47.512430" elapsed="0.000318"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:47.514114" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:47.518256" elapsed="0.000417"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.519581" level="INFO">Attempting to execute command "/tmp/karaf-0.24.0/bin/stop" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:47.518865" elapsed="0.000805"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:47.520505" level="INFO">${conn_id} = 257</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:47.519884" elapsed="0.000660"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:47.522258" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:47.522426" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:47.521485" elapsed="0.000977"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:47.522732" elapsed="0.001017"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:47.526372" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:47.836432" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:45 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:47.525606" elapsed="0.311244"/>
</kw>
<msg time="2026-04-13T02:58:47.836989" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:47.524044" elapsed="0.313118"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:47.520875" elapsed="0.316465"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:47.837894" level="INFO">Executing command '/tmp/karaf-0.24.0/bin/stop'.</msg>
<msg time="2026-04-13T02:58:48.218401" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:48.218858" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:48.218973" 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-04-13T02:58:47.837577" elapsed="0.381450"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:48.219486" elapsed="0.000581"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:48.221369" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:48.220447" elapsed="0.001032"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:48.222068" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:48.221739" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:48.221611" elapsed="0.000624"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:48.222591" elapsed="0.000111"/>
</return>
<status status="PASS" start="2026-04-13T02:58:48.222355" elapsed="0.000429"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:48.222322" elapsed="0.000516"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:48.222914" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:48.238331" elapsed="0.000720"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:48.239218" elapsed="0.000212"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:48.239570" elapsed="0.000161"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:48.223588" elapsed="0.016203"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:47.516794" elapsed="0.723095"/>
</kw>
<msg time="2026-04-13T02:58:48.239951" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:47.515929" elapsed="0.724087"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:47.515126" elapsed="0.724974"/>
</kw>
<msg time="2026-04-13T02:58:48.240143" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:47.514481" elapsed="0.725709"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:48.243129" elapsed="0.000336"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:48.243614" elapsed="0.000433"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:48.244181" 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-04-13T02:58:48.240493" elapsed="0.003838"/>
</kw>
<msg time="2026-04-13T02:58:48.244428" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:47.512950" elapsed="0.731503"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:48.244916" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:48.244650" elapsed="0.000448"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:48.245147" elapsed="0.000033"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:47.512038" elapsed="0.733242"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-13T02:58:47.511871" elapsed="0.733448"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:48.246317" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:48.246042" elapsed="0.000302"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:48.247212" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:48.247074" 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 with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T02:58:48.250212" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T02:58:48.249940" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:48.249918" elapsed="0.000378"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:48.250560" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:48.250428" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:48.251311" level="INFO">Attempting to execute command "/tmp/karaf-0.24.0/bin/stop" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:48.250848" elapsed="0.000566"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:48.253859" level="INFO">${conn_id} = 260</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:48.251559" elapsed="0.002329"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:48.255097" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:48.255224" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:48.254530" elapsed="0.000720"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:48.255425" elapsed="0.000695"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:48.258128" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:48.569452" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:46 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:48.257525" elapsed="0.312191"/>
</kw>
<msg time="2026-04-13T02:58:48.569851" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:48.256337" elapsed="0.313684"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:48.254100" elapsed="0.316097"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:48.570711" level="INFO">Executing command '/tmp/karaf-0.24.0/bin/stop'.</msg>
<msg time="2026-04-13T02:58:49.011114" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:49.011497" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:49.011597" 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-04-13T02:58:48.570426" elapsed="0.441276"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:49.012166" elapsed="0.000645"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:49.013973" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:49.013202" 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-04-13T02:58:49.014734" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:49.014377" elapsed="0.000468"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:49.014323" 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-04-13T02:58:49.015115" elapsed="0.000047"/>
</return>
<status status="PASS" start="2026-04-13T02:58:49.014960" elapsed="0.000250"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:49.014937" elapsed="0.000390"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:49.015382" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:49.029282" 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-04-13T02:58:49.029988" elapsed="0.000223"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:49.030349" elapsed="0.000102"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:49.015856" elapsed="0.014650"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:48.249364" elapsed="0.781235"/>
</kw>
<msg time="2026-04-13T02:58:49.030724" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:48.248722" elapsed="0.782063"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:48.248190" elapsed="0.782682"/>
</kw>
<msg time="2026-04-13T02:58:49.030914" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:48.247479" elapsed="0.783482"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:49.033850" elapsed="0.000366"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:49.034370" elapsed="0.000151"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:49.034893" elapsed="0.000105"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:49.031253" elapsed="0.003802"/>
</kw>
<msg time="2026-04-13T02:58:49.035157" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:48.246656" elapsed="0.788535"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:49.035650" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:49.035372" elapsed="0.000324"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:49.035742" elapsed="0.000031"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:48.245591" elapsed="0.790284"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-13T02:58:48.245420" elapsed="0.790494"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:49.036889" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:49.036580" elapsed="0.000336"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:49.037679" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:49.040786" elapsed="0.000252"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:49.041649" level="INFO">Attempting to execute command "/tmp/karaf-0.24.0/bin/stop" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:49.041171" elapsed="0.000573"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:49.042436" 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-04-13T02:58:49.041887" elapsed="0.000576"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:49.043657" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:49.043785" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:49.043108" elapsed="0.000702"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:49.043980" elapsed="0.000642"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:49.046541" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:49.408028" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:47 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:49.045950" elapsed="0.362307"/>
</kw>
<msg time="2026-04-13T02:58:49.408388" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:49.044853" elapsed="0.363752"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:49.042681" elapsed="0.366126"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:49.409309" level="INFO">Executing command '/tmp/karaf-0.24.0/bin/stop'.</msg>
<msg time="2026-04-13T02:58:49.828799" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:49.829197" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T02:58:49.829304" 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-04-13T02:58:49.409038" elapsed="0.420326"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:49.829846" elapsed="0.000605"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:49.831805" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:49.830884" elapsed="0.001028"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:49.832416" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:49.832101" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:49.832045" elapsed="0.000543"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:49.833005" elapsed="0.000071"/>
</return>
<status status="PASS" start="2026-04-13T02:58:49.832755" elapsed="0.000400"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:49.832717" elapsed="0.000496"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:49.833293" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:49.848861" 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-04-13T02:58:49.849622" elapsed="0.000394"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:49.850262" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:49.834055" elapsed="0.016365"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:49.039773" elapsed="0.810741"/>
</kw>
<msg time="2026-04-13T02:58:49.850572" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:49.039185" elapsed="0.811466"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:49.038485" elapsed="0.812249"/>
</kw>
<msg time="2026-04-13T02:58:49.850776" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:49.037953" elapsed="0.812947"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:49.853955" 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-04-13T02:58:49.854419" elapsed="0.000144"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:49.854709" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:49.851248" elapsed="0.003610"/>
</kw>
<msg time="2026-04-13T02:58:49.854953" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:49.037122" elapsed="0.817856"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:49.855453" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:49.855198" elapsed="0.000297"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:49.855540" elapsed="0.000032"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:49.036182" elapsed="0.819506"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-13T02:58:49.036014" elapsed="0.819714"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-13T02:58:47.511731" elapsed="2.344033"/>
</for>
<arg>command=${NODE_STOP_COMMAND}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-13T02:58:47.509356" elapsed="2.346470"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T02:58:49.856275" level="INFO">${updated_index_list} = [1, 2, 3]</msg>
<var>${updated_index_list}</var>
<arg>@{index_list}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T02:58:49.855967" elapsed="0.000333"/>
</kw>
<kw name="Remove Values From List" owner="Collections">
<arg>${updated_index_list}</arg>
<arg>@{stop_index_list}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-13T02:58:49.856436" elapsed="0.000241"/>
</kw>
<if>
<branch type="IF" condition="not ${confirm}">
<return>
<value>${updated_index_list}</value>
<status status="NOT RUN" start="2026-04-13T02:58:49.856868" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:49.856755" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:49.856735" elapsed="0.000199"/>
</if>
<for flavor="IN">
<iter>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:49.859223" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:49.858888" elapsed="0.000363"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:49.860114" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:49.859839" elapsed="0.000301"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:49.861139" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:49.865769" elapsed="0.000768"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:49.867895" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:49.867348" elapsed="0.000656"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:49.869495" level="INFO">${conn_id} = 266</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:49.868820" elapsed="0.000774"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:49.871777" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:49.871855" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:49.871483" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:49.872079" elapsed="0.000326"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:49.873387" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:50.191152" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:47 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:49.873067" elapsed="0.318238"/>
</kw>
<msg time="2026-04-13T02:58:50.191395" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:49.872611" elapsed="0.318872"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:49.870656" elapsed="0.321150"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:50.193189" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:58:50.216664" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:50.217333" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:58:50.217727" 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-04-13T02:58:50.192732" elapsed="0.025222"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:50.219900" elapsed="0.001032"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:50.222709" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:50.222025" elapsed="0.000837"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:50.223440" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:50.223100" elapsed="0.000453"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:50.223017" elapsed="0.000643"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:50.224172" elapsed="0.000085"/>
</return>
<status status="PASS" start="2026-04-13T02:58:50.223878" elapsed="0.000451"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:50.223807" elapsed="0.000606"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:50.224529" elapsed="0.000054"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:50.230293" elapsed="0.000384"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:50.230880" elapsed="0.000177"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:50.231238" elapsed="0.000109"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:50.226272" elapsed="0.005184"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:49.863058" elapsed="0.368650"/>
</kw>
<msg time="2026-04-13T02:58:50.232025" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:49.862410" elapsed="0.369683"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:49.861893" elapsed="0.370286"/>
</kw>
<msg time="2026-04-13T02:58:50.232223" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:49.861406" elapsed="0.370865"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:50.235116" elapsed="0.000329"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:50.235595" elapsed="0.000252"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:50.236004" elapsed="0.000107"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:50.232559" elapsed="0.003607"/>
</kw>
<msg time="2026-04-13T02:58:50.236264" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:49.860339" elapsed="0.375951"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:50.236753" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:50.236471" elapsed="0.000328"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:50.236847" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:58:50.237016" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:49.859435" elapsed="0.377615"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:58:50.237101" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:50.237253" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:58:49.858544" elapsed="0.378735"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:58:50.237978" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:58:50.237481" elapsed="0.000576">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:58:49.858167" elapsed="0.380024">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:52.241875" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:52.241092" elapsed="0.000854"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:52.244002" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:52.243349" elapsed="0.000714"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:52.245873" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:52.252456" elapsed="0.000819"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:52.254652" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:52.254074" elapsed="0.000695"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:52.256412" level="INFO">${conn_id} = 269</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:52.255566" elapsed="0.000983"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:52.259535" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:52.259663" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:52.259093" elapsed="0.000606"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:52.259973" elapsed="0.000388"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:52.261254" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:52.575594" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:20 UTC 2026

  System load:  0.45               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:50 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T02:58:52.260931" elapsed="0.314904"/>
</kw>
<msg time="2026-04-13T02:58:52.575918" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:52.260563" elapsed="0.315443"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:52.257944" elapsed="0.318328"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:52.577665" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:58:52.590256" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:52.590575" level="INFO">${stdout} = 0</msg>
<msg time="2026-04-13T02:58:52.590815" 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-04-13T02:58:52.577229" elapsed="0.013720"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:52.592741" elapsed="0.000913"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:52.595717" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:52.594710" elapsed="0.001245"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:52.596873" elapsed="0.000070"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:52.596307" elapsed="0.000739"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:52.596184" elapsed="0.000990"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:52.597997" elapsed="0.000117"/>
</return>
<status status="PASS" start="2026-04-13T02:58:52.597501" elapsed="0.000724"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:52.597390" elapsed="0.000966"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:52.598535" elapsed="0.000082"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:52.604308" elapsed="0.000378"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:52.604895" elapsed="0.000167"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:52.605253" 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-04-13T02:58:52.601144" elapsed="0.004383"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:52.249552" elapsed="0.356312"/>
</kw>
<msg time="2026-04-13T02:58:52.606179" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:52.248533" elapsed="0.357706"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:52.247861" elapsed="0.358461"/>
</kw>
<msg time="2026-04-13T02:58:52.606364" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:52.246545" elapsed="0.359864"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:52.609085" elapsed="0.000313"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:52.609546" elapsed="0.000179"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:52.609871" elapsed="0.000105"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:52.606705" elapsed="0.003323"/>
</kw>
<msg time="2026-04-13T02:58:52.610120" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:52.244546" elapsed="0.365599"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:52.610611" level="INFO">0</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:52.610347" elapsed="0.000327"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:52.610717" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:52.610872" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:52.242382" elapsed="0.368515"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:58:52.610943" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:58:52.611091" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:58:52.240248" elapsed="0.370868"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-13T02:58:52.611257" elapsed="0.000362"/>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="PASS" start="2026-04-13T02:58:52.239055" elapsed="0.372647"/>
</kw>
<arg>${timeout}</arg>
<arg>2s</arg>
<arg>Verify_Karaf_Is_Not_Running_On_Member</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-13T02:58:49.857424" elapsed="2.754326"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-13T02:58:49.857275" elapsed="2.754515"/>
</iter>
<iter>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:52.613576" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:52.613281" elapsed="0.000321"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:52.614504" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:52.614235" elapsed="0.000295"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:52.615264" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:52.620196" elapsed="0.000817"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:52.622349" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:52.621814" elapsed="0.000647"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:52.623967" level="INFO">${conn_id} = 272</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:52.623264" elapsed="0.000803"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:52.626157" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:52.626234" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:52.625877" elapsed="0.000382"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:52.626473" elapsed="0.000446"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:52.627819" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:52.947440" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:48 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:52.627479" elapsed="0.320125"/>
</kw>
<msg time="2026-04-13T02:58:52.947687" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:52.627131" elapsed="0.320624"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:52.625113" elapsed="0.322875"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:52.949173" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:58:52.972676" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:52.973168" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:58:52.973498" 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-04-13T02:58:52.948816" elapsed="0.024930"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:52.975549" elapsed="0.000934"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:52.978659" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:52.977582" elapsed="0.001321"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:52.979928" elapsed="0.000068"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:52.979400" elapsed="0.000700"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:52.979190" elapsed="0.001036"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:52.981037" elapsed="0.000114"/>
</return>
<status status="PASS" start="2026-04-13T02:58:52.980551" elapsed="0.000710"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:52.980442" elapsed="0.000950"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:52.981566" elapsed="0.000226"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:52.986669" elapsed="0.000333"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:52.987204" elapsed="0.000159"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:52.987544" 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-04-13T02:58:52.983592" elapsed="0.004182"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:52.617230" elapsed="0.370763"/>
</kw>
<msg time="2026-04-13T02:58:52.988295" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:52.616569" elapsed="0.371783"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:52.616061" elapsed="0.372373"/>
</kw>
<msg time="2026-04-13T02:58:52.988476" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:52.615528" elapsed="0.372993"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:52.991224" elapsed="0.000372"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:52.991765" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:52.992045" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:52.988814" elapsed="0.003378"/>
</kw>
<msg time="2026-04-13T02:58:52.992282" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:52.614746" elapsed="0.377561"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:52.992729" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:52.992463" elapsed="0.000311"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:52.992816" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:58:52.992969" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:52.613847" elapsed="0.379147"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:58:52.993041" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:58:52.993187" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:58:52.612952" elapsed="0.380259"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:58:52.993887" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:58:52.993401" elapsed="0.000562">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:58:52.612529" elapsed="0.381549">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:54.997247" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:54.996580" elapsed="0.000727"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:54.998574" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:54.998288" elapsed="0.000313"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:54.999419" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:55.004708" elapsed="0.000888"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:55.007001" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:55.006407" elapsed="0.000715"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:55.008664" level="INFO">${conn_id} = 275</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:55.007929" elapsed="0.000836"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:55.011070" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:55.011148" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:55.010769" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:55.011372" elapsed="0.000370"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:55.012658" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:55.333883" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:52 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:55.012307" elapsed="0.321745"/>
</kw>
<msg time="2026-04-13T02:58:55.334150" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:55.011953" elapsed="0.322286"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:55.009904" elapsed="0.324668"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:55.335894" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:58:55.359046" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:55.359552" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:58:55.359929" 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-04-13T02:58:55.335476" elapsed="0.024663"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:55.361993" elapsed="0.000943"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:55.364987" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:55.363999" elapsed="0.001221"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:55.366096" elapsed="0.000065"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:55.365567" elapsed="0.000697"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:55.365444" elapsed="0.000945"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:55.367181" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-04-13T02:58:55.366787" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:55.366677" elapsed="0.000666"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:55.367422" elapsed="0.000039"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:55.371824" elapsed="0.000339"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:55.372360" elapsed="0.000174"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:55.372816" 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-04-13T02:58:55.368582" elapsed="0.004451"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:55.001522" elapsed="0.371739"/>
</kw>
<msg time="2026-04-13T02:58:55.373568" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:55.000770" elapsed="0.372872"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:55.000221" elapsed="0.373505"/>
</kw>
<msg time="2026-04-13T02:58:55.373767" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:54.999718" elapsed="0.374095"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:55.376595" 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-04-13T02:58:55.377247" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:55.377525" 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-04-13T02:58:55.374090" elapsed="0.003602"/>
</kw>
<msg time="2026-04-13T02:58:55.377784" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:54.998832" elapsed="0.378977"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:55.378224" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:55.377975" elapsed="0.000292"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:55.378309" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:58:55.378464" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:54.997754" elapsed="0.380735"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:58:55.378543" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T02:58:55.378727" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:58:54.995856" elapsed="0.382896"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:58:55.379292" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:58:55.378894" elapsed="0.000473">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:58:54.994900" elapsed="0.384586">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:57.383600" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:57.382735" elapsed="0.000972"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:57.385639" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:57.385334" elapsed="0.000335"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:57.386474" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:57.391771" elapsed="0.000903"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:57.394025" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:57.393438" elapsed="0.000697"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:57.395800" level="INFO">${conn_id} = 278</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:57.394947" elapsed="0.000950"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:57.398282" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:57.398360" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:57.397992" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:57.398580" elapsed="0.000361"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:57.399926" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:58:57.730592" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:55 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:57.399494" elapsed="0.331338"/>
</kw>
<msg time="2026-04-13T02:58:57.730968" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:57.399147" elapsed="0.331952"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:57.397079" elapsed="0.334421"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:58:57.733417" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:58:57.756748" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:58:57.757421" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:58:57.757799" 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-04-13T02:58:57.732799" elapsed="0.025212"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:57.759923" elapsed="0.001342"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:57.762829" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:57.762059" elapsed="0.000934"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:57.763780" elapsed="0.000051"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:58:57.763263" elapsed="0.000642"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:57.763159" elapsed="0.000833"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:58:57.764522" elapsed="0.000136"/>
</return>
<status status="PASS" start="2026-04-13T02:58:57.764211" elapsed="0.000556"/>
</branch>
<status status="PASS" start="2026-04-13T02:58:57.764139" elapsed="0.000724"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:58:57.765041" elapsed="0.000059"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:57.772769" elapsed="0.000445"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:57.773431" elapsed="0.000187"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:57.773920" elapsed="0.000111"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:58:57.766899" elapsed="0.007246"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:57.388516" elapsed="0.385860"/>
</kw>
<msg time="2026-04-13T02:58:57.774725" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:57.387807" elapsed="0.386992"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:57.387269" elapsed="0.387617"/>
</kw>
<msg time="2026-04-13T02:58:57.774928" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:57.386766" elapsed="0.388208"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:57.778683" elapsed="0.000442"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:57.779303" elapsed="0.000187"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:58:57.779648" 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-04-13T02:58:57.775295" elapsed="0.004521"/>
</kw>
<msg time="2026-04-13T02:58:57.779922" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:57.385884" elapsed="0.394066"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:57.780410" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:57.780139" elapsed="0.000318"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:58:57.780506" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T02:58:57.780697" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:57.384379" elapsed="0.396344"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:58:57.780773" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:58:57.780922" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:58:57.381687" elapsed="0.399261"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:58:57.781557" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:58:57.781141" elapsed="0.000576">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:58:57.380369" elapsed="0.401494">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:58:59.784543" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:58:59.783987" elapsed="0.000607"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:58:59.786359" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:58:59.785823" elapsed="0.000579"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:59.787597" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:58:59.796117" elapsed="0.054207"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:58:59.851885" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:58:59.851183" elapsed="0.000820"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:58:59.853550" level="INFO">${conn_id} = 281</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:58:59.852809" elapsed="0.000854"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:58:59.855819" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:58:59.855899" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:58:59.855500" elapsed="0.000423"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:59.856123" elapsed="0.000362"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:58:59.857387" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:00.187243" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:22 UTC 2026

  System load:  0.15               Processes:             126
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:57 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:58:59.857059" elapsed="0.330353"/>
</kw>
<msg time="2026-04-13T02:59:00.187527" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:59.856706" elapsed="0.330915"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:58:59.854717" elapsed="0.333221"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:00.189242" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:00.212398" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:00.212975" level="INFO">${stdout} = 0</msg>
<msg time="2026-04-13T02:59:00.213375" 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-04-13T02:59:00.188850" elapsed="0.024748"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:00.215798" elapsed="0.001031"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:00.218896" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:00.217947" elapsed="0.001102"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:00.219653" elapsed="0.000048"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:00.219288" elapsed="0.000483"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:00.219203" elapsed="0.000652"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:00.220363" elapsed="0.000082"/>
</return>
<status status="PASS" start="2026-04-13T02:59:00.220066" elapsed="0.000450"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:00.219995" elapsed="0.000606"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:00.220743" elapsed="0.000056"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:00.227199" elapsed="0.000373"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:00.227867" elapsed="0.000180"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:00.228227" elapsed="0.000107"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:00.222435" elapsed="0.006010"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:58:59.791379" elapsed="0.437310"/>
</kw>
<msg time="2026-04-13T02:59:00.228998" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:59.790073" elapsed="0.438992"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:58:59.789000" elapsed="0.440150"/>
</kw>
<msg time="2026-04-13T02:59:00.229192" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:58:59.788256" elapsed="0.440982"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:00.232154" elapsed="0.000331"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:00.232653" elapsed="0.000337"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:00.233145" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:00.229531" elapsed="0.003768"/>
</kw>
<msg time="2026-04-13T02:59:00.233399" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:58:59.786748" elapsed="0.446677"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:00.233887" level="INFO">0</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:00.233610" elapsed="0.000321"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:00.233978" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:59:00.234186" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:58:59.784954" elapsed="0.449265"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:00.234270" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:59:00.234419" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:58:59.783448" elapsed="0.450996"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-13T02:59:00.234612" elapsed="0.000423"/>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="PASS" start="2026-04-13T02:58:59.782711" elapsed="0.452400"/>
</kw>
<arg>${timeout}</arg>
<arg>2s</arg>
<arg>Verify_Karaf_Is_Not_Running_On_Member</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-13T02:58:52.612023" elapsed="7.623145"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-13T02:58:52.611890" elapsed="7.623317"/>
</iter>
<iter>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:00.237134" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:00.236831" elapsed="0.000332"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:00.238074" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:00.237795" elapsed="0.000306"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:00.239165" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:00.244283" elapsed="0.000883"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:00.246790" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:00.246139" elapsed="0.000762"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:00.248395" level="INFO">${conn_id} = 284</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:00.247679" elapsed="0.000815"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:00.250833" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:00.250917" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:00.250490" elapsed="0.000451"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:00.251146" elapsed="0.000361"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:00.252444" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:00.582706" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:58:49 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:00.252104" elapsed="0.330801"/>
</kw>
<msg time="2026-04-13T02:59:00.582992" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:00.251738" elapsed="0.331346"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:00.249661" elapsed="0.333732"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:00.584715" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:00.607230" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:00.607692" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:00.607922" 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-04-13T02:59:00.584295" elapsed="0.023778"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:00.609326" elapsed="0.000725"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:00.611512" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:00.610789" elapsed="0.000905"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:00.612302" elapsed="0.000054"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:00.611946" elapsed="0.000483"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:00.611856" elapsed="0.000664"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:00.613091" elapsed="0.000091"/>
</return>
<status status="PASS" start="2026-04-13T02:59:00.612780" elapsed="0.000481"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:00.612704" elapsed="0.000652"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:00.613483" elapsed="0.000058"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:00.620013" 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-04-13T02:59:00.620992" elapsed="0.000253"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:00.621528" elapsed="0.000182"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:00.615205" elapsed="0.006669"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:00.241117" elapsed="0.381192"/>
</kw>
<msg time="2026-04-13T02:59:00.622769" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:00.240456" elapsed="0.382439"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:00.239935" elapsed="0.383087"/>
</kw>
<msg time="2026-04-13T02:59:00.623089" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:00.239438" elapsed="0.383721"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:00.627092" elapsed="0.000331"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:00.627600" elapsed="0.000167"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:00.627925" elapsed="0.000107"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:00.623617" elapsed="0.004470"/>
</kw>
<msg time="2026-04-13T02:59:00.628181" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:00.238347" elapsed="0.389859"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:00.628669" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:00.628375" elapsed="0.000342"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:00.628761" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:59:00.628915" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:00.237352" elapsed="0.391588"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:00.628987" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:59:00.629134" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:00.236440" elapsed="0.392718"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:00.629714" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:00.629302" elapsed="0.000487">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:00.236000" elapsed="0.393902">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:02.633690" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:02.632591" elapsed="0.001175"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:02.635831" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:02.635185" elapsed="0.000709"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:02.637614" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:02.645327" elapsed="0.001246"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:02.647926" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:02.647358" elapsed="0.000680"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:02.649739" level="INFO">${conn_id} = 287</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:02.648916" elapsed="0.000922"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:02.651972" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:02.652052" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:02.651677" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:02.652277" elapsed="0.000363"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:02.653532" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:02.986072" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:00 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:02.653205" elapsed="0.333067"/>
</kw>
<msg time="2026-04-13T02:59:02.986389" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:02.652852" elapsed="0.333661"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:02.650862" elapsed="0.336135"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:02.988468" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:03.011960" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:03.012737" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:03.013135" 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-04-13T02:59:02.988059" elapsed="0.025313"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:03.015572" elapsed="0.000766"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:03.017833" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:03.017079" elapsed="0.000914"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:03.018578" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:03.018239" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:03.018157" elapsed="0.000711"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:03.019387" elapsed="0.000082"/>
</return>
<status status="PASS" start="2026-04-13T02:59:03.019094" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:03.019012" elapsed="0.000611"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:03.019764" elapsed="0.000053"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:03.025568" elapsed="0.000425"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:03.026205" elapsed="0.000182"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:03.026599" elapsed="0.000278"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:03.021424" elapsed="0.005573"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:02.641049" elapsed="0.386179"/>
</kw>
<msg time="2026-04-13T02:59:03.027535" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:02.639897" elapsed="0.387705"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:02.639135" elapsed="0.388626"/>
</kw>
<msg time="2026-04-13T02:59:03.027803" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:02.638357" elapsed="0.389493"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:03.030562" elapsed="0.000424"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:03.031144" elapsed="0.000151"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:03.031430" 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-04-13T02:59:03.028139" elapsed="0.003441"/>
</kw>
<msg time="2026-04-13T02:59:03.031694" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:02.636351" elapsed="0.395370"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:03.032176" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:03.031904" elapsed="0.000317"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:03.032268" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:59:03.032426" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:02.634245" elapsed="0.398205"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:03.032498" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:59:03.032659" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:02.631798" elapsed="0.400887"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:03.033244" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:03.032829" elapsed="0.000490">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:02.630756" elapsed="0.402677">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:05.036538" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:05.035868" elapsed="0.000733"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:05.038051" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:05.037749" elapsed="0.000331"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:05.038903" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:05.044337" elapsed="0.000868"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:05.046699" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:05.046057" elapsed="0.000755"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:05.048451" level="INFO">${conn_id} = 290</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:05.047594" elapsed="0.000981"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:05.051480" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:05.051565" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:05.051157" elapsed="0.000433"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:05.051810" elapsed="0.000371"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:05.053105" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:05.373371" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:02 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:05.052763" elapsed="0.320773"/>
</kw>
<msg time="2026-04-13T02:59:05.373649" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:05.052391" elapsed="0.321350"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:05.050115" elapsed="0.323953"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:05.375398" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:05.398411" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:05.399127" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:05.399470" 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-04-13T02:59:05.374974" elapsed="0.024751"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:05.401594" elapsed="0.001170"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:05.404102" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:05.403435" elapsed="0.000815"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:05.404834" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:05.404482" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:05.404401" elapsed="0.000622"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:05.405513" elapsed="0.000081"/>
</return>
<status status="PASS" start="2026-04-13T02:59:05.405227" elapsed="0.000531"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:05.405158" elapsed="0.000733"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:05.406015" elapsed="0.000057"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:05.411587" 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-04-13T02:59:05.412213" elapsed="0.000176"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:05.412568" elapsed="0.000119"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:05.407603" elapsed="0.005196"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:05.041190" elapsed="0.371831"/>
</kw>
<msg time="2026-04-13T02:59:05.413336" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:05.040268" elapsed="0.373134"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:05.039733" elapsed="0.373750"/>
</kw>
<msg time="2026-04-13T02:59:05.413524" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:05.039197" elapsed="0.374372"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:05.416287" elapsed="0.000330"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:05.416854" elapsed="0.000159"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:05.417150" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:05.413922" elapsed="0.003382"/>
</kw>
<msg time="2026-04-13T02:59:05.417399" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:05.038296" elapsed="0.379129"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:05.418057" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:05.417605" elapsed="0.000498"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:05.418151" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:59:05.418312" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:05.036995" elapsed="0.381342"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:05.418384" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:59:05.418529" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:05.035129" elapsed="0.383425"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:05.419115" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:05.418712" elapsed="0.000477">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:05.034189" elapsed="0.385113">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:07.422936" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:07.422108" elapsed="0.000908"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:07.425094" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:07.424437" elapsed="0.000719"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:07.427589" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:07.433600" elapsed="0.000884"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:07.435894" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:07.435289" elapsed="0.000720"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:07.437671" level="INFO">${conn_id} = 293</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:07.436880" elapsed="0.000895"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:07.439970" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:07.440050" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:07.439580" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:07.440319" elapsed="0.000367"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:07.441586" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:07.747737" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:05 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:07.441258" elapsed="0.306635"/>
</kw>
<msg time="2026-04-13T02:59:07.747982" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:07.440902" elapsed="0.307164"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:07.438816" elapsed="0.309534"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:07.749725" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:07.772893" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:07.773556" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:07.773855" 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-04-13T02:59:07.749301" elapsed="0.024699"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:07.775498" elapsed="0.000975"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:07.778186" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:07.777370" elapsed="0.001019"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:07.779114" elapsed="0.000055"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:07.778690" elapsed="0.000556"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:07.778554" elapsed="0.000779"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:07.779978" elapsed="0.000095"/>
</return>
<status status="PASS" start="2026-04-13T02:59:07.779550" elapsed="0.000597"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:07.779478" elapsed="0.000756"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:07.780353" elapsed="0.000056"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:07.785258" 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-04-13T02:59:07.786075" elapsed="0.000277"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:07.786602" 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-04-13T02:59:07.781906" elapsed="0.005029"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:07.430382" elapsed="0.356865"/>
</kw>
<msg time="2026-04-13T02:59:07.787827" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:07.429697" elapsed="0.358234"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:07.429159" elapsed="0.358897"/>
</kw>
<msg time="2026-04-13T02:59:07.788116" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:07.428471" elapsed="0.359714"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:07.792105" elapsed="0.000580"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:07.792874" elapsed="0.000244"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:07.793323" 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-04-13T02:59:07.788682" elapsed="0.004870"/>
</kw>
<msg time="2026-04-13T02:59:07.793715" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:07.425798" elapsed="0.367957"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:07.794525" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:07.794138" elapsed="0.000457"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:07.794695" elapsed="0.000057"/>
</return>
<msg time="2026-04-13T02:59:07.794923" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:07.423454" elapsed="0.371501"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:07.795015" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:59:07.795207" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:07.421256" elapsed="0.373983"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:07.796168" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:07.795443" elapsed="0.000843">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:07.420178" elapsed="0.376329">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:09.799964" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:09.799182" elapsed="0.000872"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:09.802079" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:09.801503" elapsed="0.000614"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:09.803214" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:09.810133" elapsed="0.000810"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:09.812282" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:09.811739" elapsed="0.000652"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:09.813936" level="INFO">${conn_id} = 296</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:09.813183" elapsed="0.000851"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:09.816230" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:09.816308" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:09.815941" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:09.816526" elapsed="0.000360"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:09.817800" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:10.183184" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:07 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:09.817436" elapsed="0.365991"/>
</kw>
<msg time="2026-04-13T02:59:10.183514" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:09.817091" elapsed="0.366509"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:09.815045" elapsed="0.368854"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:10.185171" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:10.208220" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:10.208593" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:10.208791" 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-04-13T02:59:10.184786" elapsed="0.024118"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:10.209972" elapsed="0.000544"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:10.211662" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:10.211088" 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-04-13T02:59:10.212246" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:10.211974" elapsed="0.000364"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:10.211907" 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-04-13T02:59:10.212824" elapsed="0.000069"/>
</return>
<status status="PASS" start="2026-04-13T02:59:10.212570" elapsed="0.000380"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:10.212515" elapsed="0.000508"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:10.213124" elapsed="0.000045"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:10.218303" elapsed="0.000418"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:10.218955" elapsed="0.000202"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:10.219369" 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-04-13T02:59:10.214481" elapsed="0.005135"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:09.805992" elapsed="0.413995"/>
</kw>
<msg time="2026-04-13T02:59:10.220358" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:09.805044" elapsed="0.415389"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:09.804302" elapsed="0.416228"/>
</kw>
<msg time="2026-04-13T02:59:10.220578" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:09.803599" elapsed="0.417049"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:10.223851" elapsed="0.000392"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:10.224424" elapsed="0.000174"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:10.224827" elapsed="0.000117"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:10.220984" elapsed="0.004021"/>
</kw>
<msg time="2026-04-13T02:59:10.225113" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:09.802402" elapsed="0.422740"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:10.225660" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:10.225352" elapsed="0.000363"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:10.225766" elapsed="0.000114"/>
</return>
<msg time="2026-04-13T02:59:10.226044" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:09.800536" elapsed="0.425543"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:10.226137" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:59:10.226308" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:09.798358" elapsed="0.427978"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:10.227068" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:10.226580" elapsed="0.000573">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:09.797284" elapsed="0.430000">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:12.232182" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:12.231062" elapsed="0.001193"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:12.234083" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:12.233476" elapsed="0.000665"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:12.235800" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:12.244893" elapsed="0.001120"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:12.247798" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:12.247087" elapsed="0.000822"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:12.250106" level="INFO">${conn_id} = 299</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:12.249082" elapsed="0.001158"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:12.253253" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:12.253375" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:12.252860" elapsed="0.000555"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:12.253728" elapsed="0.000544"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:12.255994" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:12.603022" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:10 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:12.255182" elapsed="0.348036"/>
</kw>
<msg time="2026-04-13T02:59:12.603307" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:12.254576" elapsed="0.348824"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:12.251608" elapsed="0.352111"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:12.605062" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:12.617710" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:12.618093" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:12.618306" 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-04-13T02:59:12.604625" elapsed="0.013817"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:12.619676" elapsed="0.000642"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:12.621653" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:12.621004" elapsed="0.000802"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:12.622364" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:12.622035" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:12.621953" elapsed="0.000602"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:12.623105" elapsed="0.000087"/>
</return>
<status status="PASS" start="2026-04-13T02:59:12.622783" elapsed="0.000479"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:12.622713" elapsed="0.000632"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:12.623459" elapsed="0.000053"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:12.629565" 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-04-13T02:59:12.630369" elapsed="0.000245"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:12.630885" elapsed="0.000150"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:12.625174" elapsed="0.006063"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:12.239797" elapsed="0.391756"/>
</kw>
<msg time="2026-04-13T02:59:12.632025" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:12.238514" elapsed="0.393582"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:12.237446" elapsed="0.394734"/>
</kw>
<msg time="2026-04-13T02:59:12.632222" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:12.236386" elapsed="0.395882"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:12.635107" elapsed="0.000375"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:12.635681" elapsed="0.000178"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:12.635997" elapsed="0.000104"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:12.632567" elapsed="0.003588"/>
</kw>
<msg time="2026-04-13T02:59:12.636252" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:12.234576" elapsed="0.401703"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:12.636823" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:12.636469" elapsed="0.000399"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:12.636917" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T02:59:12.637088" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:12.232692" elapsed="0.404422"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:12.637160" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:59:12.637306" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:12.229801" elapsed="0.407529"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:12.637934" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:12.637472" elapsed="0.000538">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:12.228291" elapsed="0.409836">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:14.640894" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:14.640290" elapsed="0.000659"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:14.642528" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:14.642065" elapsed="0.000515"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:14.644012" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:14.651115" elapsed="0.001341"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:14.654208" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:14.653360" elapsed="0.000978"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:14.656084" level="INFO">${conn_id} = 302</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:14.655234" elapsed="0.000989"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:14.658912" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:14.659012" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:14.658530" elapsed="0.000511"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:14.659274" elapsed="0.000443"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:14.660858" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:14.978331" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:12 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:14.660429" elapsed="0.318066"/>
</kw>
<msg time="2026-04-13T02:59:14.978585" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:14.659961" elapsed="0.318737"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:14.657416" elapsed="0.321587"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:14.980368" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:15.002744" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:15.003248" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:15.003578" 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-04-13T02:59:14.979929" elapsed="0.023922"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:15.005708" elapsed="0.000954"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:15.008768" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:15.007717" elapsed="0.001291"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:15.010144" elapsed="0.000071"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:15.009362" elapsed="0.000959"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:15.009237" elapsed="0.001210"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:15.011260" elapsed="0.000115"/>
</return>
<status status="PASS" start="2026-04-13T02:59:15.010799" elapsed="0.000683"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:15.010688" elapsed="0.000922"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:15.011818" elapsed="0.000083"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:15.016820" elapsed="0.000341"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:15.017359" elapsed="0.000168"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:15.017779" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:15.013785" elapsed="0.004208"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:14.647399" elapsed="0.370817"/>
</kw>
<msg time="2026-04-13T02:59:15.018518" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:14.646301" elapsed="0.372275"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:14.645428" elapsed="0.373247"/>
</kw>
<msg time="2026-04-13T02:59:15.018718" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:14.644521" elapsed="0.374245"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:15.021405" 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-04-13T02:59:15.021962" elapsed="0.000150"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:15.022249" 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-04-13T02:59:15.019047" elapsed="0.003353"/>
</kw>
<msg time="2026-04-13T02:59:15.022493" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:14.642952" elapsed="0.379566"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:15.022947" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:15.022694" elapsed="0.000297"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:15.023034" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:59:15.023188" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:14.641389" elapsed="0.381824"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:15.023260" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:59:15.023405" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:14.639611" elapsed="0.383819"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:15.023980" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:15.023571" elapsed="0.000482">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:14.638832" elapsed="0.385332">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:17.028291" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:17.027458" elapsed="0.000907"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:17.030492" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:17.029850" elapsed="0.000706"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:17.032469" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:17.041005" elapsed="0.001101"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:17.043549" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:17.042983" elapsed="0.000717"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:17.045193" level="INFO">${conn_id} = 305</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:17.044463" elapsed="0.000834"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:17.047528" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:17.047608" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:17.047195" elapsed="0.000641"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:17.048044" elapsed="0.000363"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:17.049320" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:17.373161" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:14 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:17.048989" elapsed="0.324414"/>
</kw>
<msg time="2026-04-13T02:59:17.373552" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:17.048617" elapsed="0.325142"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:17.046332" elapsed="0.327868"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:17.376074" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:17.399210" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:17.399902" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:17.400251" 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-04-13T02:59:17.375333" elapsed="0.025138"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:17.402402" elapsed="0.001038"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:17.405536" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:17.404505" elapsed="0.001335"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:17.406734" elapsed="0.000069"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:17.406193" elapsed="0.000711"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:17.406068" elapsed="0.000961"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:17.407839" elapsed="0.000122"/>
</return>
<status status="PASS" start="2026-04-13T02:59:17.407354" elapsed="0.000714"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:17.407247" elapsed="0.000952"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:17.408381" elapsed="0.000084"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:17.413775" elapsed="0.000355"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:17.414402" elapsed="0.000177"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:17.414775" elapsed="0.000105"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:17.410653" elapsed="0.004336"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:17.037919" elapsed="0.377294"/>
</kw>
<msg time="2026-04-13T02:59:17.415525" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:17.036178" elapsed="0.379412"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:17.034714" elapsed="0.380974"/>
</kw>
<msg time="2026-04-13T02:59:17.415731" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:17.033298" elapsed="0.382480"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:17.418508" elapsed="0.000389"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:17.419053" elapsed="0.000157"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:17.419344" 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-04-13T02:59:17.416064" elapsed="0.003431"/>
</kw>
<msg time="2026-04-13T02:59:17.419589" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:17.031154" elapsed="0.388461"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:17.420064" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:17.419811" elapsed="0.000297"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:17.420154" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:59:17.420322" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:17.028846" elapsed="0.391500"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:17.420393" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:59:17.420538" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:17.026410" elapsed="0.394152"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:17.421160" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:17.420758" elapsed="0.000477">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:17.024988" elapsed="0.396359">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:19.425326" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:19.424327" elapsed="0.001084"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:19.427996" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:19.427184" elapsed="0.000900"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:19.430136" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:19.440410" elapsed="0.001614"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:19.444028" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:19.443144" elapsed="0.001044"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:19.446402" level="INFO">${conn_id} = 308</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:19.445282" elapsed="0.001256"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:19.449584" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:19.449882" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:19.449134" elapsed="0.000789"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:19.450213" elapsed="0.000581"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:19.452164" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:19.817374" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:58:21 UTC 2026

  System load:  0.1                Processes:             122
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:17 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:19.451666" elapsed="0.365912"/>
</kw>
<msg time="2026-04-13T02:59:19.817721" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:19.451100" elapsed="0.366735"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:19.448018" elapsed="0.370174"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:19.819897" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:19.842615" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:19.843031" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:19.843234" 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-04-13T02:59:19.819367" elapsed="0.023998"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:19.844405" elapsed="0.000623"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:19.846219" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:19.845620" elapsed="0.000742"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:19.846924" elapsed="0.000084"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:19.846582" elapsed="0.000496"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:19.846504" elapsed="0.000649"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:19.847586" elapsed="0.000103"/>
</return>
<status status="PASS" start="2026-04-13T02:59:19.847343" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:19.847275" elapsed="0.000544"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:19.847906" elapsed="0.000049"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:19.854109" 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-04-13T02:59:19.855169" elapsed="0.000292"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:19.855716" 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-04-13T02:59:19.849320" elapsed="0.006674"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:19.434470" elapsed="0.421817"/>
</kw>
<msg time="2026-04-13T02:59:19.856713" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:19.433172" elapsed="0.423612"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:19.432124" elapsed="0.424746"/>
</kw>
<msg time="2026-04-13T02:59:19.856925" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:19.430992" elapsed="0.425997"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:19.860043" elapsed="0.000343"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:19.860542" elapsed="0.000174"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:19.860855" elapsed="0.000105"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:19.857324" elapsed="0.003689"/>
</kw>
<msg time="2026-04-13T02:59:19.861111" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:19.428607" elapsed="0.432531"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:19.861578" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:19.861319" elapsed="0.000304"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:19.861714" elapsed="0.000038"/>
</return>
<msg time="2026-04-13T02:59:19.861913" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:19.426117" elapsed="0.435825"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:19.861991" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:59:19.862148" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:19.423403" elapsed="0.438776"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:19.862851" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:19.862339" elapsed="0.000610">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:19.422218" elapsed="0.440927">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:21.866281" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:21.865773" elapsed="0.000557"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:21.867663" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:21.867245" elapsed="0.000459"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:21.868880" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:21.876886" elapsed="0.001227"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:21.880603" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:21.879487" elapsed="0.001495"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:21.882671" level="INFO">${conn_id} = 311</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:21.881910" elapsed="0.000862"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:21.885524" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:21.885691" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:21.885084" elapsed="0.000644"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:21.885999" elapsed="0.000528"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:21.887862" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:22.479058" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:19 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:21.887352" elapsed="0.591907"/>
</kw>
<msg time="2026-04-13T02:59:22.479371" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:21.886835" elapsed="0.592651"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:21.883983" elapsed="0.595903"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:22.481756" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:22.504723" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:22.505209" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:22.505445" 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-04-13T02:59:22.481148" elapsed="0.024519"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:22.507354" elapsed="0.000936"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:22.510142" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:22.509241" elapsed="0.001127"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:22.511132" elapsed="0.000047"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:22.510721" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:22.510588" elapsed="0.000767"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:22.511884" elapsed="0.000081"/>
</return>
<status status="PASS" start="2026-04-13T02:59:22.511564" elapsed="0.000470"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:22.511495" elapsed="0.000621"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:22.512245" elapsed="0.000082"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:22.518656" elapsed="0.000560"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:22.519534" elapsed="0.000269"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:22.520060" elapsed="0.000182"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:22.514207" elapsed="0.006298"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:21.871925" elapsed="0.649040"/>
</kw>
<msg time="2026-04-13T02:59:22.521546" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:21.870755" elapsed="0.651027"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:21.870004" elapsed="0.651908"/>
</kw>
<msg time="2026-04-13T02:59:22.521970" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:21.869275" elapsed="0.652761"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:22.525926" 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-04-13T02:59:22.526601" elapsed="0.000243"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:22.527035" elapsed="0.000143"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:22.522520" elapsed="0.004735"/>
</kw>
<msg time="2026-04-13T02:59:22.527392" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:21.868029" elapsed="0.659399"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:22.528062" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:22.527699" elapsed="0.000430"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:22.528195" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T02:59:22.528371" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:21.866614" elapsed="0.661782"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:22.528465" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:59:22.528614" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:21.865220" elapsed="0.663435"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:22.529431" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:22.528853" elapsed="0.000679">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:21.864205" elapsed="0.665610">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:24.532317" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:24.531792" elapsed="0.000575"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:24.533711" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:24.533242" elapsed="0.000510"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:24.534900" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:24.542074" elapsed="0.000965"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:24.544495" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:24.543847" elapsed="0.000778"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:24.546339" level="INFO">${conn_id} = 314</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:24.545428" elapsed="0.001041"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:24.549680" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:24.549807" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:24.549148" elapsed="0.000696"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:24.550140" elapsed="0.000953"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:24.552473" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:24.872156" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:22 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:24.551991" elapsed="0.320341"/>
</kw>
<msg time="2026-04-13T02:59:24.872419" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:24.551420" elapsed="0.321083"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:24.547929" elapsed="0.324913"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:24.874312" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:24.897454" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:24.898299" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:24.898741" 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-04-13T02:59:24.873881" elapsed="0.025120"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:24.901419" elapsed="0.001438"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:24.905530" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:24.904352" elapsed="0.001416"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:24.906468" elapsed="0.000073"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:24.906063" elapsed="0.000586"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:24.905972" elapsed="0.000767"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:24.907304" elapsed="0.000085"/>
</return>
<status status="PASS" start="2026-04-13T02:59:24.906993" elapsed="0.000472"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:24.906903" elapsed="0.000647"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:24.907795" elapsed="0.000058"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:24.913269" 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-04-13T02:59:24.914000" elapsed="0.000193"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:24.914377" elapsed="0.000108"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:24.909579" elapsed="0.005018"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:24.537708" elapsed="0.377140"/>
</kw>
<msg time="2026-04-13T02:59:24.915179" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:24.536656" elapsed="0.378597"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:24.536014" elapsed="0.379325"/>
</kw>
<msg time="2026-04-13T02:59:24.915381" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:24.535305" elapsed="0.380124"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:24.918291" 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-04-13T02:59:24.918852" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:24.919160" elapsed="0.000114"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:24.915827" elapsed="0.003502"/>
</kw>
<msg time="2026-04-13T02:59:24.919508" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:24.534054" elapsed="0.385482"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:24.920131" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:24.919849" elapsed="0.000331"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:24.920230" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T02:59:24.920397" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:24.532674" elapsed="0.387749"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:24.920470" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:59:24.920620" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:24.531248" elapsed="0.389417"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:24.921220" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:24.920812" elapsed="0.000499">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:24.530483" elapsed="0.390951">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:26.925070" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:26.924225" elapsed="0.000920"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:26.927866" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:26.927228" elapsed="0.000683"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:26.929045" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:26.937466" elapsed="0.000818"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:26.939616" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:26.939065" elapsed="0.000680"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:26.941294" level="INFO">${conn_id} = 317</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:26.940500" elapsed="0.000893"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:26.943480" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:26.943558" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:26.943188" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:26.943796" elapsed="0.000344"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:26.945108" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:27.264258" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:24 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:26.944784" elapsed="0.319750"/>
</kw>
<msg time="2026-04-13T02:59:27.264621" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:26.944344" elapsed="0.320388"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:26.942394" elapsed="0.322620"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:27.266296" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:27.289798" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:27.290316" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:27.290689" 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-04-13T02:59:27.265903" elapsed="0.025001"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:27.292770" elapsed="0.000933"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:27.295813" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:27.294773" elapsed="0.001188"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:27.296520" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:27.296191" elapsed="0.000587"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:27.296110" elapsed="0.000766"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:27.297370" elapsed="0.000077"/>
</return>
<status status="PASS" start="2026-04-13T02:59:27.297082" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:27.297014" elapsed="0.000581"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:27.297729" elapsed="0.000053"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:27.303792" 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-04-13T02:59:27.304543" elapsed="0.000431"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:27.305229" 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-04-13T02:59:27.299290" elapsed="0.006233"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:26.931871" elapsed="0.373980"/>
</kw>
<msg time="2026-04-13T02:59:27.306289" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:26.930920" elapsed="0.375455"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:26.930160" elapsed="0.376330"/>
</kw>
<msg time="2026-04-13T02:59:27.306547" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:26.929432" elapsed="0.377179"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:27.309661" 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-04-13T02:59:27.310133" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:27.310417" elapsed="0.000133"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:27.307061" elapsed="0.003579"/>
</kw>
<msg time="2026-04-13T02:59:27.310744" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:26.928218" elapsed="0.382551"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:27.311266" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:27.310948" elapsed="0.000365"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:27.311359" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:59:27.311520" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:26.925618" elapsed="0.385928"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:27.311593" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:59:27.311774" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:26.923353" elapsed="0.388446"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:27.312444" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:27.312036" elapsed="0.000490">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:26.922233" elapsed="0.390471">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:29.316957" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:29.316101" elapsed="0.000929"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:29.319512" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:29.318850" elapsed="0.000726"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:29.321448" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:29.328598" elapsed="0.001156"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:29.331132" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:29.330521" elapsed="0.000722"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:29.332767" level="INFO">${conn_id} = 320</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:29.332027" elapsed="0.000841"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:29.335082" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:29.335162" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:29.334782" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:29.335385" elapsed="0.000359"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:29.336673" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:29.659558" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:27 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:29.336332" elapsed="0.323406"/>
</kw>
<msg time="2026-04-13T02:59:29.659826" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:29.335953" elapsed="0.323959"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:29.333887" elapsed="0.326316"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:29.661602" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:29.684672" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:29.685311" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:29.685718" 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-04-13T02:59:29.661196" elapsed="0.024841"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:29.688232" elapsed="0.000921"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:29.690513" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:29.689846" elapsed="0.000847"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:29.691279" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:29.690938" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:29.690844" elapsed="0.000629"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:29.692002" elapsed="0.000081"/>
</return>
<status status="PASS" start="2026-04-13T02:59:29.691703" elapsed="0.000452"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:29.691610" elapsed="0.000633"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:29.692403" elapsed="0.000058"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:29.698557" 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-04-13T02:59:29.699357" elapsed="0.000237"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:29.699871" elapsed="0.000147"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:29.694109" elapsed="0.006064"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:29.324454" elapsed="0.376082"/>
</kw>
<msg time="2026-04-13T02:59:29.700984" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:29.323440" elapsed="0.377610"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:29.322660" elapsed="0.378475"/>
</kw>
<msg time="2026-04-13T02:59:29.701178" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:29.321912" elapsed="0.379312"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:29.703989" 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-04-13T02:59:29.704493" elapsed="0.000203"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:29.704849" elapsed="0.000106"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:29.701512" elapsed="0.003497"/>
</kw>
<msg time="2026-04-13T02:59:29.705104" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:29.320159" elapsed="0.384971"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:29.705563" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:29.705307" elapsed="0.000300"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:29.705693" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T02:59:29.705856" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:29.317489" elapsed="0.388391"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:29.705928" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:59:29.706075" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:29.315185" elapsed="0.390915"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:29.706693" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:29.706243" elapsed="0.000527">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:29.314019" elapsed="0.392890">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:31.712029" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:31.711049" elapsed="0.001055"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:31.714127" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:31.713699" elapsed="0.000468"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:31.715361" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:31.721681" elapsed="0.001075"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:31.724343" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:31.723554" elapsed="0.000935"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:31.726202" level="INFO">${conn_id} = 323</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:31.725398" elapsed="0.000902"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:31.728565" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:31.728702" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:31.728242" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:31.728964" elapsed="0.000425"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:31.730768" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:32.085537" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:29 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:31.730290" elapsed="0.355483"/>
</kw>
<msg time="2026-04-13T02:59:32.085864" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:31.729792" elapsed="0.356166"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:31.727463" elapsed="0.358823"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:32.087610" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:32.111732" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:32.112380" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:32.112796" 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-04-13T02:59:32.087206" elapsed="0.025832"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:32.115201" elapsed="0.001059"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:32.118476" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:32.117395" elapsed="0.001349"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:32.119788" elapsed="0.000075"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:32.119100" elapsed="0.000869"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:32.118976" elapsed="0.001117"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:32.120903" elapsed="0.000123"/>
</return>
<status status="PASS" start="2026-04-13T02:59:32.120415" elapsed="0.000721"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:32.120307" elapsed="0.000961"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:32.121445" elapsed="0.000085"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:32.126060" elapsed="0.000341"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:32.126596" elapsed="0.000182"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:32.126958" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:32.122955" elapsed="0.004213"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:31.718368" elapsed="0.409023"/>
</kw>
<msg time="2026-04-13T02:59:32.127714" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:31.717490" elapsed="0.410285"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:31.716649" elapsed="0.411209"/>
</kw>
<msg time="2026-04-13T02:59:32.127897" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:31.715865" elapsed="0.412078"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:32.130595" elapsed="0.000331"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:32.131080" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:32.131360" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:32.128216" elapsed="0.003291"/>
</kw>
<msg time="2026-04-13T02:59:32.131599" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:31.714483" elapsed="0.417155"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:32.132052" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:32.131803" elapsed="0.000293"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:32.132139" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T02:59:32.132291" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:31.712766" elapsed="0.419551"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:32.132365" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:59:32.132510" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:31.709079" elapsed="0.423456"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:32.133088" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:32.132693" elapsed="0.000483">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:31.708063" elapsed="0.425230">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:34.136893" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:34.136037" elapsed="0.000931"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:34.139078" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:34.138356" elapsed="0.000788"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:34.140961" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:34.149392" elapsed="0.001041"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:34.151852" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:34.151284" elapsed="0.000680"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:34.153616" level="INFO">${conn_id} = 326</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:34.152788" elapsed="0.000951"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:34.156003" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:34.156085" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:34.155709" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:34.156312" elapsed="0.000358"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:34.157573" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:34.493679" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:32 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:34.157239" elapsed="0.336602"/>
</kw>
<msg time="2026-04-13T02:59:34.493933" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:34.156882" elapsed="0.337150"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:34.154902" elapsed="0.339521"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:34.495840" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:34.519105" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:34.519670" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:34.520018" 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-04-13T02:59:34.495407" elapsed="0.024827"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:34.523070" elapsed="0.000942"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:34.526117" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:34.525086" elapsed="0.001311"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:34.527559" elapsed="0.000106"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:34.526993" elapsed="0.000786"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:34.526744" elapsed="0.001160"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:34.528460" elapsed="0.000080"/>
</return>
<status status="PASS" start="2026-04-13T02:59:34.528175" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:34.528108" elapsed="0.000638"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:34.528859" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:34.535542" 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-04-13T02:59:34.536319" elapsed="0.000234"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:34.536917" 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-04-13T02:59:34.530428" elapsed="0.006767"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:34.145723" elapsed="0.391762"/>
</kw>
<msg time="2026-04-13T02:59:34.537894" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:34.144193" elapsed="0.393802"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:34.142968" elapsed="0.395135"/>
</kw>
<msg time="2026-04-13T02:59:34.538148" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:34.141762" elapsed="0.396435"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:34.541210" elapsed="0.000326"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:34.541705" elapsed="0.000152"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:34.541993" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:34.538489" elapsed="0.003655"/>
</kw>
<msg time="2026-04-13T02:59:34.542239" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:34.139612" elapsed="0.402654"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:34.542721" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:34.542449" elapsed="0.000317"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:34.542811" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:59:34.543036" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:34.137417" elapsed="0.405651"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:34.543117" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:59:34.543269" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:34.135210" elapsed="0.408084"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:34.543866" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:34.543437" elapsed="0.000506">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:34.134076" elapsed="0.409983">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:36.549694" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:36.548496" elapsed="0.001302"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:36.552175" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:36.551424" elapsed="0.000816"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:36.554147" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:36.560742" elapsed="0.000800"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:36.562896" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:36.562329" elapsed="0.000710"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:36.564600" level="INFO">${conn_id} = 329</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:36.563867" elapsed="0.000862"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:36.566890" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:36.566991" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:36.566502" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:36.567230" elapsed="0.000352"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:36.568902" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:36.923736" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:34 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:36.568549" elapsed="0.355342"/>
</kw>
<msg time="2026-04-13T02:59:36.923994" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:36.568180" elapsed="0.355905"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:36.565740" elapsed="0.358653"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:36.925700" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:36.948814" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:36.949333" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:36.949707" 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-04-13T02:59:36.925277" elapsed="0.024645"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:36.951756" elapsed="0.001042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:36.954265" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:36.953616" elapsed="0.000803"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:36.955027" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:36.954691" elapsed="0.000447"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:36.954569" elapsed="0.000651"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:36.955801" elapsed="0.000077"/>
</return>
<status status="PASS" start="2026-04-13T02:59:36.955427" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:36.955357" elapsed="0.000701"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:36.956201" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:36.962378" 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-04-13T02:59:36.963177" elapsed="0.000233"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:36.963816" elapsed="0.000178"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:36.957866" elapsed="0.006301"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:36.557446" elapsed="0.407110"/>
</kw>
<msg time="2026-04-13T02:59:36.965086" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:36.556732" elapsed="0.408438"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:36.556099" elapsed="0.409167"/>
</kw>
<msg time="2026-04-13T02:59:36.965309" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:36.554819" elapsed="0.410538"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:36.968032" elapsed="0.000353"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:36.968540" elapsed="0.000168"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:36.968847" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:36.965656" elapsed="0.003346"/>
</kw>
<msg time="2026-04-13T02:59:36.969098" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:36.552746" elapsed="0.416379"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:36.969552" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:36.969295" elapsed="0.000304"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:36.969659" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:59:36.969816" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:36.550387" elapsed="0.419456"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:36.969890" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:59:36.970039" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:36.547222" elapsed="0.422842"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:36.970608" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:36.970208" elapsed="0.000503">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:36.544869" elapsed="0.425957">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:38.974434" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:38.973685" elapsed="0.000830"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:38.976572" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:38.975920" elapsed="0.000744"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:38.978461" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:38.986102" elapsed="0.000912"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:38.988387" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:38.987841" elapsed="0.000658"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:38.990173" level="INFO">${conn_id} = 332</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:38.989420" elapsed="0.000851"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:38.992643" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:38.992730" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:38.992274" elapsed="0.000480"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:38.992957" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:38.994320" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:39.335272" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:36 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:38.993993" elapsed="0.341435"/>
</kw>
<msg time="2026-04-13T02:59:39.335514" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:38.993607" elapsed="0.341994"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:38.991329" elapsed="0.344586"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:39.337236" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:39.359829" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:39.360246" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:39.360453" 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-04-13T02:59:39.336819" elapsed="0.023740"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:39.361496" elapsed="0.000577"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:39.363078" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:39.362570" elapsed="0.000619"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:39.363676" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:39.363367" elapsed="0.000394"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:39.363299" elapsed="0.000521"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:39.364178" elapsed="0.000061"/>
</return>
<status status="PASS" start="2026-04-13T02:59:39.363970" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:39.363920" elapsed="0.000431"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:39.364435" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:39.369288" elapsed="0.000926"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:39.370465" elapsed="0.000359"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:39.371014" elapsed="0.000108"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:39.365697" elapsed="0.005536"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:38.981527" elapsed="0.389934"/>
</kw>
<msg time="2026-04-13T02:59:39.371791" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:38.980507" elapsed="0.391348"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:38.979654" elapsed="0.392286"/>
</kw>
<msg time="2026-04-13T02:59:39.371982" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:38.978901" elapsed="0.393127"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:39.374817" elapsed="0.000350"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:39.375324" elapsed="0.000152"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:39.375610" elapsed="0.000142"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:39.372400" elapsed="0.003405"/>
</kw>
<msg time="2026-04-13T02:59:39.375902" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:38.977125" elapsed="0.398803"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:39.376497" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:39.376161" elapsed="0.000393"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:39.376615" elapsed="0.000061"/>
</return>
<msg time="2026-04-13T02:59:39.376849" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:38.974982" elapsed="0.401901"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:39.376947" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:59:39.377141" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:38.972766" elapsed="0.404410"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:39.377953" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:39.377365" elapsed="0.000693">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:38.971564" elapsed="0.406644">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:41.381909" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:41.381059" elapsed="0.000924"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:41.384269" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:41.383555" elapsed="0.000776"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:41.386230" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:41.393367" elapsed="0.000904"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:41.395777" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:41.395186" elapsed="0.000701"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:41.397404" 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-04-13T02:59:41.396681" elapsed="0.000821"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:41.399676" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:41.399759" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:41.399354" elapsed="0.000430"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:41.399985" elapsed="0.000434"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:41.401349" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:41.726733" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:39 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:41.401009" elapsed="0.325892"/>
</kw>
<msg time="2026-04-13T02:59:41.726993" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:41.400636" elapsed="0.326444"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:41.398551" elapsed="0.328811"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:41.728681" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:41.752796" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:41.753159" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:41.753311" 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-04-13T02:59:41.728266" elapsed="0.025153"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:41.754326" elapsed="0.000572"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:41.755882" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:41.755389" elapsed="0.000599"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:41.756458" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:41.756205" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:41.756141" elapsed="0.000453"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:41.756964" elapsed="0.000061"/>
</return>
<status status="PASS" start="2026-04-13T02:59:41.756760" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:41.756710" elapsed="0.000425"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:41.757216" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:41.761760" elapsed="0.000350"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:41.762308" elapsed="0.000174"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:41.762905" elapsed="0.000108"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:41.758365" elapsed="0.004757"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:41.388447" elapsed="0.374898"/>
</kw>
<msg time="2026-04-13T02:59:41.763669" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:41.387730" elapsed="0.376005"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:41.387180" elapsed="0.376639"/>
</kw>
<msg time="2026-04-13T02:59:41.763860" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:41.386622" elapsed="0.377284"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:41.766566" elapsed="0.000340"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:41.767058" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:41.767340" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:41.764221" elapsed="0.003265"/>
</kw>
<msg time="2026-04-13T02:59:41.767705" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:41.384844" elapsed="0.382890"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:41.768160" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:41.767907" elapsed="0.000297"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:41.768266" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T02:59:41.768420" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:41.382514" elapsed="0.385931"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:41.768492" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T02:59:41.768652" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:41.380158" elapsed="0.388520"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:41.769220" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:41.768819" elapsed="0.000476">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:41.379099" elapsed="0.390308">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:43.772791" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:43.772114" elapsed="0.000729"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:43.774103" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:43.773779" elapsed="0.000366"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:43.775334" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:43.782806" elapsed="0.001568"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:43.786109" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:43.785324" elapsed="0.000938"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:43.788521" level="INFO">${conn_id} = 338</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:43.787402" elapsed="0.001259"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:43.791507" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:43.791631" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:43.791099" elapsed="0.000814"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:43.792212" elapsed="0.000541"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:43.793985" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:44.125101" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:41 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:43.793538" elapsed="0.331862"/>
</kw>
<msg time="2026-04-13T02:59:44.125519" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:43.793031" elapsed="0.332628"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:43.789962" elapsed="0.336100"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:44.128430" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:44.151467" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:44.152233" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:44.152699" 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-04-13T02:59:44.127663" elapsed="0.025298"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:44.154947" elapsed="0.001063"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:44.158323" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:44.157220" elapsed="0.001347"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:44.159502" elapsed="0.000071"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:44.158980" elapsed="0.000769"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:44.158841" elapsed="0.001171"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:44.160788" elapsed="0.000066"/>
</return>
<status status="PASS" start="2026-04-13T02:59:44.160374" elapsed="0.000533"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:44.160250" elapsed="0.000718"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:44.161051" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:44.165713" 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-04-13T02:59:44.166336" elapsed="0.000223"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:44.166802" elapsed="0.000117"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:44.162268" elapsed="0.004779"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:43.778799" elapsed="0.388486"/>
</kw>
<msg time="2026-04-13T02:59:44.167605" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:43.777372" elapsed="0.390347"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:43.776563" elapsed="0.391259"/>
</kw>
<msg time="2026-04-13T02:59:44.167866" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:43.775828" elapsed="0.392089"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:44.170931" elapsed="0.000342"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:44.171476" elapsed="0.000174"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:44.171841" elapsed="0.000117"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:44.168292" elapsed="0.003759"/>
</kw>
<msg time="2026-04-13T02:59:44.172159" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:43.774459" elapsed="0.397728"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:44.172785" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:44.172383" elapsed="0.000452"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:44.172886" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:59:44.173054" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:43.773133" elapsed="0.399947"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:44.173130" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:59:44.173290" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:43.771264" elapsed="0.402069"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:44.174076" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:44.173601" elapsed="0.000554">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:43.770249" elapsed="0.404024">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:46.178932" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:46.177998" elapsed="0.001013"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:46.181168" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:46.180497" elapsed="0.000732"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:46.183191" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:46.189439" elapsed="0.001232"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:46.192037" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:46.191463" elapsed="0.000684"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:46.193848" level="INFO">${conn_id} = 341</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:46.193091" elapsed="0.000857"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:46.196139" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:46.196218" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:46.195783" elapsed="0.000459"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:46.196488" elapsed="0.000612"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:46.198039" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:46.525909" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:44 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:46.197692" elapsed="0.328426"/>
</kw>
<msg time="2026-04-13T02:59:46.526219" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:46.197313" elapsed="0.329019"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:46.194984" elapsed="0.331690"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:46.528142" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:46.551445" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:46.551867" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:46.552023" 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-04-13T02:59:46.527707" elapsed="0.024416"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:46.553070" elapsed="0.000630"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:46.554731" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:46.554205" 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-04-13T02:59:46.555284" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:46.555020" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:46.554956" elapsed="0.000508"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:46.555887" elapsed="0.000067"/>
</return>
<status status="PASS" start="2026-04-13T02:59:46.555617" elapsed="0.000390"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:46.555567" elapsed="0.000501"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:46.556150" elapsed="0.000041"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:46.560616" 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-04-13T02:59:46.561348" elapsed="0.000183"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:46.561740" elapsed="0.000108"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:46.557363" elapsed="0.004603"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:46.186375" elapsed="0.375823"/>
</kw>
<msg time="2026-04-13T02:59:46.562535" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:46.185524" elapsed="0.377084"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:46.184982" elapsed="0.377733"/>
</kw>
<msg time="2026-04-13T02:59:46.562757" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:46.183969" elapsed="0.378836"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:46.565758" 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-04-13T02:59:46.566263" elapsed="0.000157"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:46.566557" elapsed="0.000118"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:46.563115" elapsed="0.003615"/>
</kw>
<msg time="2026-04-13T02:59:46.566830" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:46.181747" elapsed="0.385110"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:46.567323" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:46.567058" elapsed="0.000309"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:46.567416" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T02:59:46.567609" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:46.179495" elapsed="0.388154"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:46.567700" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T02:59:46.567850" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:46.177094" elapsed="0.390782"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:46.568444" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:46.568020" elapsed="0.000507">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:46.175696" elapsed="0.393007">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:48.571828" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:48.571242" elapsed="0.000636"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:48.573322" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:48.572935" elapsed="0.000427"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:48.574609" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:48.581358" elapsed="0.001768"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:48.585110" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:48.584224" elapsed="0.001052"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:48.587460" level="INFO">${conn_id} = 344</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:48.586338" elapsed="0.001255"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:48.590562" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:48.590977" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:48.590096" elapsed="0.000921"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:48.591316" elapsed="0.000552"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:48.593202" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:48.898431" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:46 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:48.592746" elapsed="0.305914"/>
</kw>
<msg time="2026-04-13T02:59:48.898776" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:48.592171" elapsed="0.306719"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:48.588979" elapsed="0.310309"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:48.901326" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:48.924507" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:48.925230" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:48.925567" 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-04-13T02:59:48.900580" elapsed="0.025265"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:48.927730" elapsed="0.001003"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:48.930839" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:48.929838" elapsed="0.001233"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:48.932051" elapsed="0.000069"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:48.931419" elapsed="0.000805"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:48.931298" elapsed="0.001052"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:48.933264" elapsed="0.000122"/>
</return>
<status status="PASS" start="2026-04-13T02:59:48.932723" elapsed="0.000770"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:48.932579" elapsed="0.001042"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:48.933875" elapsed="0.000037"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:48.938233" elapsed="0.000366"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:48.938816" elapsed="0.000181"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:48.939175" 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-04-13T02:59:48.935021" elapsed="0.004368"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:48.577409" elapsed="0.362204"/>
</kw>
<msg time="2026-04-13T02:59:48.939945" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:48.576385" elapsed="0.363625"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:48.575571" elapsed="0.364523"/>
</kw>
<msg time="2026-04-13T02:59:48.940135" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:48.574942" elapsed="0.365239"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:48.943103" elapsed="0.000330"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:48.943586" elapsed="0.000174"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:48.943895" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:48.940471" elapsed="0.003573"/>
</kw>
<msg time="2026-04-13T02:59:48.944139" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:48.573693" elapsed="0.370472"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:48.944608" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:48.944353" elapsed="0.000316"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:48.944717" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T02:59:48.944898" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:48.572323" elapsed="0.372601"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:48.944973" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:59:48.945121" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:48.570669" elapsed="0.374476"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:48.945830" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:48.945286" elapsed="0.000627">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:48.569510" elapsed="0.376522">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:50.948019" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:50.947616" elapsed="0.000477"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:50.949249" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:50.948750" elapsed="0.000564"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:50.951207" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:50.959689" elapsed="0.000826"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:50.961877" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:50.961302" elapsed="0.000690"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:50.963540" level="INFO">${conn_id} = 347</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:50.962799" elapsed="0.000858"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:50.965896" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:50.965975" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:50.965586" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:50.966196" elapsed="0.000341"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:50.967516" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:51.299398" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:48 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:50.967185" elapsed="0.332394"/>
</kw>
<msg time="2026-04-13T02:59:51.299693" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:50.966803" elapsed="0.332987"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:50.964806" elapsed="0.335287"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:51.301427" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:51.324525" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:51.325147" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:51.325492" 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-04-13T02:59:51.301024" elapsed="0.024809"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:51.328084" elapsed="0.001266"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:51.331442" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:51.330620" 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-04-13T02:59:51.332304" elapsed="0.000047"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:51.331947" elapsed="0.000474"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:51.331852" elapsed="0.000656"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:51.333086" elapsed="0.000089"/>
</return>
<status status="PASS" start="2026-04-13T02:59:51.332752" elapsed="0.000496"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:51.332677" elapsed="0.000659"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:51.333454" elapsed="0.000055"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:51.339645" elapsed="0.000370"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:51.340285" elapsed="0.000183"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:51.340666" 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-04-13T02:59:51.335310" elapsed="0.005573"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:50.956199" elapsed="0.384910"/>
</kw>
<msg time="2026-04-13T02:59:51.341421" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:50.954559" elapsed="0.386928"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:50.953285" elapsed="0.388285"/>
</kw>
<msg time="2026-04-13T02:59:51.341611" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:50.952053" elapsed="0.389743"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:51.344523" 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-04-13T02:59:51.345026" elapsed="0.000151"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:51.345310" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:51.342150" elapsed="0.003307"/>
</kw>
<msg time="2026-04-13T02:59:51.345552" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:50.949842" elapsed="0.395735"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:51.346126" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:51.345812" elapsed="0.000359"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:51.346220" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T02:59:51.346380" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:50.948311" elapsed="0.398093"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:51.346452" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:59:51.346598" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:50.947234" elapsed="0.399389"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:51.347272" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:51.346786" elapsed="0.000586">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:50.946610" elapsed="0.400913">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:53.350267" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:53.349717" elapsed="0.000612"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:53.352077" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:53.351497" elapsed="0.000636"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:53.353854" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:53.363748" elapsed="0.001253"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:53.366995" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:53.366072" elapsed="0.001116"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:53.369660" level="INFO">${conn_id} = 350</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:53.368568" elapsed="0.001237"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:53.373245" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:53.373377" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:53.372755" elapsed="0.000662"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:53.373743" elapsed="0.000509"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:53.376006" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:53.711461" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:51 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:53.375158" elapsed="0.336496"/>
</kw>
<msg time="2026-04-13T02:59:53.711781" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:53.374655" elapsed="0.337220"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:53.371334" elapsed="0.340830"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:53.713455" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:53.737277" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:53.737916" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:53.738252" 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-04-13T02:59:53.713060" elapsed="0.025405"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:53.740415" elapsed="0.000966"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:53.743542" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:53.742497" elapsed="0.001417"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:53.744848" elapsed="0.000069"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:53.744303" elapsed="0.000718"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:53.744160" elapsed="0.000925"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:53.745435" elapsed="0.000060"/>
</return>
<status status="PASS" start="2026-04-13T02:59:53.745231" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:53.745181" elapsed="0.000422"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:53.745701" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:53.750119" 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-04-13T02:59:53.750694" elapsed="0.000176"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:53.751055" elapsed="0.000102"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:53.746939" elapsed="0.004327"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:53.359018" elapsed="0.392475"/>
</kw>
<msg time="2026-04-13T02:59:53.751993" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:53.357364" elapsed="0.394696"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:53.356184" elapsed="0.395959"/>
</kw>
<msg time="2026-04-13T02:59:53.752185" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:53.354882" elapsed="0.397348"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:53.754969" 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-04-13T02:59:53.755436" elapsed="0.000151"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:53.755793" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:53.752527" elapsed="0.003437"/>
</kw>
<msg time="2026-04-13T02:59:53.756058" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:53.352576" elapsed="0.403508"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:53.756514" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:53.756258" elapsed="0.000301"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:53.756604" elapsed="0.000050"/>
</return>
<msg time="2026-04-13T02:59:53.756782" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:53.350772" elapsed="0.406036"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:53.756854" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T02:59:53.757000" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:53.349111" elapsed="0.407914"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:53.757700" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:53.757173" elapsed="0.000647">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:53.348291" elapsed="0.409685">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:55.760433" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:55.759979" elapsed="0.000505"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:55.761842" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:55.761410" elapsed="0.000474"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:55.763085" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:55.773236" elapsed="0.001202"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:55.776233" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:55.775439" elapsed="0.000933"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:55.778088" level="INFO">${conn_id} = 353</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:55.777272" elapsed="0.000918"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:55.780571" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:55.780795" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:55.780238" elapsed="0.000599"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:55.781050" elapsed="0.000378"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:55.782828" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:56.096343" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:53 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:55.782280" elapsed="0.314233"/>
</kw>
<msg time="2026-04-13T02:59:56.096620" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:55.781730" elapsed="0.315009"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:55.779344" elapsed="0.317694"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:56.098364" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:56.121463" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:56.122215" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:56.122590" 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-04-13T02:59:56.097955" elapsed="0.025025"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:56.125158" elapsed="0.001057"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:56.128745" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:56.127510" elapsed="0.001480"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:56.130172" elapsed="0.000098"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:56.129541" elapsed="0.000860"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:56.129229" elapsed="0.001330"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:56.131605" elapsed="0.000160"/>
</return>
<status status="PASS" start="2026-04-13T02:59:56.131062" elapsed="0.000815"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:56.130950" elapsed="0.001059"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:56.132183" elapsed="0.000042"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:56.137011" 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-04-13T02:59:56.137665" elapsed="0.000195"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:56.138049" elapsed="0.000113"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:56.133391" elapsed="0.004891"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:55.766428" elapsed="0.372089"/>
</kw>
<msg time="2026-04-13T02:59:56.139009" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:55.765127" elapsed="0.373959"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:55.764324" elapsed="0.374852"/>
</kw>
<msg time="2026-04-13T02:59:56.139220" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:55.763513" elapsed="0.375756"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:56.142434" 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-04-13T02:59:56.143122" elapsed="0.000187"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:56.143529" elapsed="0.000136"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:56.139760" elapsed="0.003964"/>
</kw>
<msg time="2026-04-13T02:59:56.143826" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:55.762199" elapsed="0.381654"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:56.144310" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:56.144042" elapsed="0.000315"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:56.144421" elapsed="0.000053"/>
</return>
<msg time="2026-04-13T02:59:56.144674" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:55.760810" elapsed="0.383892"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:56.144754" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T02:59:56.144901" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:55.759415" elapsed="0.385511"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:56.145511" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:56.145073" elapsed="0.000544">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:55.758704" elapsed="0.387057">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T02:59:58.147606" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T02:59:58.147231" elapsed="0.000427"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T02:59:58.148656" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T02:59:58.148265" elapsed="0.000421"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:58.149480" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T02:59:58.154287" elapsed="0.001497"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:58.157213" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:58.156605" elapsed="0.000742"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T02:59:58.158908" level="INFO">${conn_id} = 356</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:58.158132" elapsed="0.000890"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T02:59:58.161326" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T02:59:58.161406" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T02:59:58.161014" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:58.161658" elapsed="0.000458"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T02:59:58.163068" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T02:59:58.480662" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:56 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T02:59:58.162725" elapsed="0.318100"/>
</kw>
<msg time="2026-04-13T02:59:58.480919" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:58.162328" elapsed="0.318682"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T02:59:58.160065" elapsed="0.321294"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T02:59:58.482674" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T02:59:58.494936" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T02:59:58.495554" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T02:59:58.495952" 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-04-13T02:59:58.482259" elapsed="0.013951"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:58.498227" elapsed="0.001063"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:58.501763" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:58.500534" elapsed="0.001484"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:58.502926" elapsed="0.000066"/>
</return>
<status status="NOT RUN" start="2026-04-13T02:59:58.502379" elapsed="0.000715"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:58.502253" elapsed="0.000967"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T02:59:58.504027" elapsed="0.000121"/>
</return>
<status status="PASS" start="2026-04-13T02:59:58.503542" elapsed="0.000713"/>
</branch>
<status status="PASS" start="2026-04-13T02:59:58.503436" elapsed="0.000952"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T02:59:58.504561" elapsed="0.000282"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:58.509981" elapsed="0.000370"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:58.510554" elapsed="0.000198"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:58.510937" elapsed="0.000109"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:58.506796" elapsed="0.004361"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T02:59:58.151501" elapsed="0.359926"/>
</kw>
<msg time="2026-04-13T02:59:58.511761" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:58.150814" elapsed="0.361013"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T02:59:58.150274" elapsed="0.361640"/>
</kw>
<msg time="2026-04-13T02:59:58.511956" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:58.149774" elapsed="0.362229"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T02:59:58.514920" elapsed="0.000325"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T02:59:58.515400" elapsed="0.000155"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T02:59:58.515712" elapsed="0.000103"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T02:59:58.512292" elapsed="0.003577"/>
</kw>
<msg time="2026-04-13T02:59:58.516113" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T02:59:58.148897" elapsed="0.367255"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T02:59:58.516761" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T02:59:58.516371" elapsed="0.000443"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T02:59:58.516865" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T02:59:58.517063" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T02:59:58.147858" elapsed="0.369234"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T02:59:58.517164" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T02:59:58.517320" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T02:59:58.146860" elapsed="0.370485"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T02:59:58.517938" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T02:59:58.517490" elapsed="0.000540">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T02:59:58.146308" elapsed="0.371848">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:00.522591" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:00.521824" elapsed="0.000868"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:00.524738" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:00.524071" elapsed="0.000731"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:00.525931" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:00.530869" elapsed="0.001107"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:00.533429" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:00.532788" elapsed="0.000753"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:00.535133" level="INFO">${conn_id} = 359</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:00.534377" elapsed="0.000857"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:00.537415" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:00.537496" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:00.537113" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:00.537786" elapsed="0.000376"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:00.539188" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:00.849853" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 02:59:58 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:00.538850" elapsed="0.311245"/>
</kw>
<msg time="2026-04-13T03:00:00.850178" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:00.538372" elapsed="0.311906"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:00.536280" elapsed="0.314287"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:00.851962" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:00.874554" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:00.875231" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:00.875574" 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-04-13T03:00:00.851526" elapsed="0.024323"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:00.877808" elapsed="0.001012"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:00.880945" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:00.879918" elapsed="0.001271"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:00.882175" elapsed="0.000068"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:00.881545" elapsed="0.000792"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:00.881419" elapsed="0.000977"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:00.882792" elapsed="0.000066"/>
</return>
<status status="PASS" start="2026-04-13T03:00:00.882545" elapsed="0.000365"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:00.882496" elapsed="0.000476"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:00.883056" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:00.887483" 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-04-13T03:00:00.888211" elapsed="0.000185"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:00.888582" 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-04-13T03:00:00.884309" elapsed="0.004516"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:00.528020" elapsed="0.361036"/>
</kw>
<msg time="2026-04-13T03:00:00.889371" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:00.527280" elapsed="0.362160"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:00.526746" elapsed="0.362781"/>
</kw>
<msg time="2026-04-13T03:00:00.889570" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:00.526220" elapsed="0.363397"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:00.892577" elapsed="0.000369"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:00.893103" elapsed="0.000164"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:00.893404" elapsed="0.000102"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:00.889987" elapsed="0.003572"/>
</kw>
<msg time="2026-04-13T03:00:00.893673" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:00.525314" elapsed="0.368405"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:00.894167" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:00.893904" elapsed="0.000310"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:00.894262" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T03:00:00.894429" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:00.523124" elapsed="0.371331"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:00.894503" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:00:00.894688" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:00.519982" elapsed="0.374745"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:00.895379" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:00.894963" elapsed="0.000491">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:00.518925" elapsed="0.376644">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:02.897958" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:02.897412" elapsed="0.000595"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:02.899317" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:02.898909" elapsed="0.000448"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:02.900515" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:02.906883" elapsed="0.001065"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:02.909909" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:02.908743" elapsed="0.001276"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:02.911551" level="INFO">${conn_id} = 362</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:02.910861" elapsed="0.000801"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:02.913746" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:02.913823" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:02.913443" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:02.914047" elapsed="0.000351"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:02.915454" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:03.226193" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 03:00:00 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:02.915127" elapsed="0.311232"/>
</kw>
<msg time="2026-04-13T03:00:03.226447" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:02.914606" elapsed="0.311931"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:02.912665" elapsed="0.314185"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:03.228155" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:03.250805" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:03.251311" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:03.251681" 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-04-13T03:00:03.227752" elapsed="0.024145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:03.253753" elapsed="0.000902"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:03.256694" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:03.255701" elapsed="0.001234"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:03.257951" elapsed="0.000067"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:03.257285" elapsed="0.000835"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:03.257161" elapsed="0.001085"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:03.258842" elapsed="0.000079"/>
</return>
<status status="PASS" start="2026-04-13T03:00:03.258519" elapsed="0.000474"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:03.258448" elapsed="0.000632"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:03.259198" elapsed="0.000059"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:03.265434" 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-04-13T03:00:03.266374" elapsed="0.000188"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:03.266757" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:03.260900" elapsed="0.006069"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:02.903459" elapsed="0.363735"/>
</kw>
<msg time="2026-04-13T03:00:03.267504" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:02.902473" elapsed="0.365091"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:02.901705" elapsed="0.365957"/>
</kw>
<msg time="2026-04-13T03:00:03.267704" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:02.900959" elapsed="0.366792"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:03.270394" elapsed="0.000335"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:03.270878" elapsed="0.000143"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:03.271177" 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-04-13T03:00:03.268030" elapsed="0.003295"/>
</kw>
<msg time="2026-04-13T03:00:03.271417" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:02.899688" elapsed="0.371754"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:03.271872" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:03.271609" elapsed="0.000307"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:03.271958" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:00:03.272114" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:02.898294" elapsed="0.373845"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:03.272186" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T03:00:03.272331" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:02.896908" elapsed="0.375447"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:03.272921" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:03.272495" elapsed="0.000500">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:02.896138" elapsed="0.376969">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:05.276979" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:05.276129" elapsed="0.000922"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:05.279543" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:05.278739" elapsed="0.000875"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:05.281011" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:05.286572" elapsed="0.000896"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:05.289040" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:05.288325" elapsed="0.000843"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:05.291149" level="INFO">${conn_id} = 365</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:05.290306" elapsed="0.000952"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:05.293580" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:05.293856" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:05.293250" elapsed="0.000634"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:05.294089" elapsed="0.000375"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:05.295499" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:05.633356" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 03:00:03 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:05.295125" elapsed="0.338388"/>
</kw>
<msg time="2026-04-13T03:00:05.633599" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:05.294693" elapsed="0.339014"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:05.292402" elapsed="0.341594"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:05.635281" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:05.658877" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:05.659359" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:05.659554" 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-04-13T03:00:05.634888" elapsed="0.024839"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:05.661004" elapsed="0.000772"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:05.663306" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:05.662491" elapsed="0.000979"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:05.664192" elapsed="0.000053"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:05.663744" elapsed="0.000578"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:05.663654" elapsed="0.000829"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:05.665079" elapsed="0.000093"/>
</return>
<status status="PASS" start="2026-04-13T03:00:05.664774" elapsed="0.000476"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:05.664697" elapsed="0.000649"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:05.665474" elapsed="0.000058"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:05.671864" elapsed="0.000654"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:05.673038" elapsed="0.000282"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:05.673600" elapsed="0.000183"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:05.667079" elapsed="0.006871"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:05.283331" elapsed="0.390929"/>
</kw>
<msg time="2026-04-13T03:00:05.674728" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:05.282584" elapsed="0.392249"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:05.281933" elapsed="0.393031"/>
</kw>
<msg time="2026-04-13T03:00:05.675027" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:05.281342" elapsed="0.393759"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:05.679444" 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-04-13T03:00:05.680257" elapsed="0.000288"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:05.680823" elapsed="0.000158"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:05.675556" elapsed="0.005508"/>
</kw>
<msg time="2026-04-13T03:00:05.681226" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:05.280191" elapsed="0.401075"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:05.681964" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:05.681541" elapsed="0.000491"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:05.682104" elapsed="0.000056"/>
</return>
<msg time="2026-04-13T03:00:05.682345" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:05.277683" elapsed="0.404702"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:05.682459" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T03:00:05.682706" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:05.275146" elapsed="0.407602"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:05.683586" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:05.682976" elapsed="0.000743">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:05.273975" elapsed="0.409922">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:07.687595" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:07.686814" elapsed="0.000883"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:07.689783" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:07.689108" elapsed="0.000739"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:07.691748" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:07.700162" elapsed="0.001019"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:07.702881" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:07.702205" elapsed="0.000794"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:07.704757" level="INFO">${conn_id} = 368</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:07.703858" elapsed="0.001002"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:07.707306" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:07.707392" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:07.706985" elapsed="0.000433"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:07.707657" elapsed="0.000377"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:07.708983" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:08.061988" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 03:00:05 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:07.708605" elapsed="0.353578"/>
</kw>
<msg time="2026-04-13T03:00:08.062294" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:07.708250" elapsed="0.354768"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:07.706085" elapsed="0.357352"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:08.065263" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:08.088115" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:08.088794" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:08.089250" 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-04-13T03:00:08.064710" elapsed="0.024768"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:08.091528" elapsed="0.000807"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:08.093882" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:08.093100" elapsed="0.000945"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:08.095492" elapsed="0.000050"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:08.095128" elapsed="0.000485"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:08.095029" elapsed="0.000696"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:08.096261" elapsed="0.000086"/>
</return>
<status status="PASS" start="2026-04-13T03:00:08.095952" elapsed="0.000469"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:08.095878" elapsed="0.000632"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:08.096652" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:08.102273" 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-04-13T03:00:08.103021" elapsed="0.000214"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:08.103699" elapsed="0.000116"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:08.098518" elapsed="0.005414"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:07.695430" elapsed="0.408735"/>
</kw>
<msg time="2026-04-13T03:00:08.104533" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:07.694279" elapsed="0.410331"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:07.693239" elapsed="0.411495"/>
</kw>
<msg time="2026-04-13T03:00:08.104793" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:07.692306" elapsed="0.412548"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:08.108022" 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-04-13T03:00:08.108583" elapsed="0.000225"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:08.108970" elapsed="0.000109"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:08.105213" elapsed="0.003925"/>
</kw>
<msg time="2026-04-13T03:00:08.109241" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:07.690323" elapsed="0.418945"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:08.109875" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:08.109499" elapsed="0.000422"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:08.109971" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T03:00:08.110147" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:07.688141" elapsed="0.422032"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:08.110223" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T03:00:08.110372" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:07.685920" elapsed="0.424477"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:08.110979" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:08.110545" elapsed="0.000542">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:07.684813" elapsed="0.426403">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:10.114975" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:10.114117" elapsed="0.000932"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:10.117378" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:10.116579" elapsed="0.000863"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:10.118697" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:10.127293" elapsed="0.000811"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:10.129494" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:10.128945" elapsed="0.000657"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:10.131147" 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-04-13T03:00:10.130376" elapsed="0.000869"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:10.133349" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:10.133428" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:10.133062" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:10.133665" elapsed="0.000345"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:10.135033" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:10.457962" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 03:00:08 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:10.134566" elapsed="0.323570"/>
</kw>
<msg time="2026-04-13T03:00:10.458226" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:10.134218" elapsed="0.324103"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:10.132242" elapsed="0.326376"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:10.460014" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:10.483292" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:10.483822" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:10.484046" 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-04-13T03:00:10.459579" elapsed="0.024614"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:10.485506" elapsed="0.000833"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:10.487710" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:10.487031" elapsed="0.000838"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:10.488460" elapsed="0.000048"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:10.488120" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:10.488028" elapsed="0.000674"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:10.489279" elapsed="0.000091"/>
</return>
<status status="PASS" start="2026-04-13T03:00:10.488923" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:10.488850" elapsed="0.000682"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:10.489676" elapsed="0.000057"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:10.497294" elapsed="0.000815"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:10.498419" elapsed="0.000297"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:10.498970" elapsed="0.000147"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:10.491307" elapsed="0.007964"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:10.121508" elapsed="0.378063"/>
</kw>
<msg time="2026-04-13T03:00:10.500119" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:10.120508" elapsed="0.379711"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:10.119778" elapsed="0.380563"/>
</kw>
<msg time="2026-04-13T03:00:10.500400" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:10.119079" elapsed="0.381389"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:10.504363" elapsed="0.000453"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:10.505029" elapsed="0.000227"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:10.505456" elapsed="0.000133"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:10.500913" elapsed="0.004766"/>
</kw>
<msg time="2026-04-13T03:00:10.505813" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:10.117897" elapsed="0.387951"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:10.506496" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:10.506144" elapsed="0.000415"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:10.506621" elapsed="0.000068"/>
</return>
<msg time="2026-04-13T03:00:10.506875" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:10.115550" elapsed="0.391361"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:10.506972" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T03:00:10.507177" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:10.113198" elapsed="0.394016"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:10.508045" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:10.507412" elapsed="0.000737">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:10.112022" elapsed="0.396287">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:12.512227" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:12.511423" elapsed="0.000873"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:12.514253" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:12.513653" elapsed="0.000661"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:12.516048" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:12.523279" elapsed="0.001406"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:12.526098" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:12.525466" elapsed="0.000742"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:12.527902" level="INFO">${conn_id} = 374</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:12.527151" elapsed="0.000860"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:12.530249" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:12.530332" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:12.529934" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:12.530559" elapsed="0.000436"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:12.531928" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:12.848524" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 03:00:10 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:12.531567" elapsed="0.317159"/>
</kw>
<msg time="2026-04-13T03:00:12.848811" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:12.531208" elapsed="0.317697"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:12.529131" elapsed="0.320059"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:12.850451" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:12.873369" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:12.873938" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:12.874301" 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-04-13T03:00:12.850063" elapsed="0.024454"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:12.876392" elapsed="0.000879"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:12.879403" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:12.878347" elapsed="0.001322"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:12.880500" elapsed="0.000063"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:12.880017" elapsed="0.000684"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:12.879896" elapsed="0.000936"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:12.881588" elapsed="0.000148"/>
</return>
<status status="PASS" start="2026-04-13T03:00:12.881148" elapsed="0.000695"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:12.881042" elapsed="0.000930"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:12.882146" elapsed="0.000082"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:12.887516" elapsed="0.000356"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:12.888070" elapsed="0.000165"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:12.888412" elapsed="0.000101"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:12.884374" elapsed="0.004249"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:12.519057" elapsed="0.369807"/>
</kw>
<msg time="2026-04-13T03:00:12.889172" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:12.518029" elapsed="0.371204"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:12.517231" elapsed="0.372083"/>
</kw>
<msg time="2026-04-13T03:00:12.889355" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:12.516461" elapsed="0.372940"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:12.892150" elapsed="0.000310"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:12.892608" elapsed="0.000161"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:12.892902" elapsed="0.001123"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:12.889761" elapsed="0.004363"/>
</kw>
<msg time="2026-04-13T03:00:12.894244" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:12.514791" elapsed="0.379480"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:12.894856" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:12.894493" elapsed="0.000409"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:12.894948" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T03:00:12.895152" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:12.512747" elapsed="0.382431"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:12.895229" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:00:12.895379" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:12.510560" elapsed="0.384844"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:12.895998" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:12.895550" elapsed="0.000570">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:12.509521" elapsed="0.386765">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:14.898959" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:14.898404" elapsed="0.000606"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:14.900380" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:14.899920" elapsed="0.000499"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:14.901756" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:14.908778" elapsed="0.001556"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:14.912446" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:14.911564" elapsed="0.001039"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:14.914387" 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-04-13T03:00:14.913560" elapsed="0.000929"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:14.916819" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:14.916929" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:14.916333" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:14.917234" elapsed="0.000751"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:14.919163" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:15.233823" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 03:00:12 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:14.918786" elapsed="0.315203"/>
</kw>
<msg time="2026-04-13T03:00:15.234083" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:14.918271" elapsed="0.315902"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:14.915510" elapsed="0.318959"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:15.235813" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:15.258979" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:15.259624" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:15.260041" 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-04-13T03:00:15.235382" elapsed="0.024881"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:15.262375" elapsed="0.001154"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:15.265899" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:15.264990" elapsed="0.001100"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:15.266782" elapsed="0.000055"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:15.266350" elapsed="0.000560"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:15.266262" elapsed="0.000741"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:15.267590" elapsed="0.000106"/>
</return>
<status status="PASS" start="2026-04-13T03:00:15.267262" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:15.267178" elapsed="0.000683"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:15.267986" elapsed="0.000054"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:15.274247" 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-04-13T03:00:15.275048" elapsed="0.000242"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:15.275555" elapsed="0.000189"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:15.269792" elapsed="0.006117"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:14.904797" elapsed="0.371450"/>
</kw>
<msg time="2026-04-13T03:00:15.276882" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:14.903740" elapsed="0.373249"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:14.902965" elapsed="0.374145"/>
</kw>
<msg time="2026-04-13T03:00:15.277154" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:14.902242" elapsed="0.374962"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:15.279976" elapsed="0.000327"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:15.280477" elapsed="0.000224"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:15.280860" elapsed="0.000104"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:15.277555" elapsed="0.003465"/>
</kw>
<msg time="2026-04-13T03:00:15.281184" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:14.900795" elapsed="0.380416"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:15.281660" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:15.281383" elapsed="0.000325"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:15.281753" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:00:15.281921" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:14.899298" elapsed="0.382650"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:15.281997" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:00:15.282149" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:14.897893" elapsed="0.384282"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:15.282746" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:15.282320" elapsed="0.000502">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:14.897153" elapsed="0.385786">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:17.286766" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:17.285914" elapsed="0.000930"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:17.289005" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:17.288314" elapsed="0.000790"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:17.291055" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:17.297775" elapsed="0.001069"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:17.300203" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:17.299603" elapsed="0.000716"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:17.301924" level="INFO">${conn_id} = 380</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:17.301170" elapsed="0.000856"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:17.304141" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:17.304221" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:17.303846" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:17.304447" elapsed="0.000451"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:17.305849" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:17.626903" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 03:00:15 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:17.305505" elapsed="0.321711"/>
</kw>
<msg time="2026-04-13T03:00:17.627315" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:17.305106" elapsed="0.322293"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:17.303049" elapsed="0.324662"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:17.629033" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:17.652925" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:17.653715" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:17.654190" 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-04-13T03:00:17.628596" elapsed="0.025834"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:17.656513" elapsed="0.001295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:17.660320" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:17.658974" elapsed="0.001600"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:17.661948" elapsed="0.000107"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:17.661042" elapsed="0.001162"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:17.660910" elapsed="0.001385"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:17.662970" elapsed="0.000087"/>
</return>
<status status="PASS" start="2026-04-13T03:00:17.662652" elapsed="0.000477"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:17.662572" elapsed="0.000639"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:17.663332" elapsed="0.000061"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:17.668763" 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-04-13T03:00:17.669523" elapsed="0.000325"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:17.670094" 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-04-13T03:00:17.664850" elapsed="0.005556"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:17.295003" elapsed="0.375735"/>
</kw>
<msg time="2026-04-13T03:00:17.671148" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:17.294299" elapsed="0.376951"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:17.293082" elapsed="0.378282"/>
</kw>
<msg time="2026-04-13T03:00:17.671422" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:17.291742" elapsed="0.379747"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:17.675078" elapsed="0.000425"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:17.675694" elapsed="0.000185"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:17.676021" elapsed="0.000107"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:17.671953" elapsed="0.004231"/>
</kw>
<msg time="2026-04-13T03:00:17.676288" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:17.289711" elapsed="0.386604"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:17.676805" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:17.676506" elapsed="0.000346"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:17.676902" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T03:00:17.677080" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:17.287310" elapsed="0.389795"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:17.677153" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:00:17.677320" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:17.284837" elapsed="0.392510"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:17.678139" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:17.677581" elapsed="0.000665">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:17.283752" elapsed="0.394615">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:19.681218" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:19.680599" elapsed="0.000671"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:19.682620" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:19.682206" elapsed="0.000493"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:19.683985" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:19.690564" elapsed="0.000888"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:19.692854" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:19.692253" elapsed="0.000712"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:19.694446" level="INFO">${conn_id} = 383</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:19.693741" elapsed="0.000804"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:19.697464" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:19.697613" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:19.696935" elapsed="0.000751"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:19.698032" elapsed="0.000591"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:19.700019" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:20.008753" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 03:00:17 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:19.699681" elapsed="0.309232"/>
</kw>
<msg time="2026-04-13T03:00:20.009001" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:19.699185" elapsed="0.309902"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:19.695745" elapsed="0.313639"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:20.010700" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:20.033506" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:20.034239" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:20.034581" 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-04-13T03:00:20.010288" elapsed="0.024613"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:20.036782" elapsed="0.000934"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:20.039719" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:20.038796" elapsed="0.001091"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:20.040478" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:20.040153" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:20.040071" elapsed="0.000625"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:20.041222" elapsed="0.000075"/>
</return>
<status status="PASS" start="2026-04-13T03:00:20.040934" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:20.040856" elapsed="0.000610"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:20.041601" elapsed="0.000076"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:20.047468" 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-04-13T03:00:20.048077" elapsed="0.000165"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:20.048421" elapsed="0.000098"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:20.043293" elapsed="0.005347"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:19.687264" elapsed="0.361597"/>
</kw>
<msg time="2026-04-13T03:00:20.049164" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:19.686345" elapsed="0.362878"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:19.685653" elapsed="0.363651"/>
</kw>
<msg time="2026-04-13T03:00:20.049345" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:19.684863" elapsed="0.364527"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:20.052483" elapsed="0.000447"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:20.053136" elapsed="0.000204"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:20.053528" elapsed="0.000169"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:20.049680" elapsed="0.004088"/>
</kw>
<msg time="2026-04-13T03:00:20.053895" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:19.683016" elapsed="0.370913"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:20.054520" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:20.054167" elapsed="0.000416"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:20.054664" elapsed="0.000046"/>
</return>
<msg time="2026-04-13T03:00:20.054927" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:19.681568" elapsed="0.373400"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:20.055035" elapsed="0.000038"/>
</return>
<msg time="2026-04-13T03:00:20.055238" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:19.680056" elapsed="0.375217"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:20.056085" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:20.055469" elapsed="0.000720">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:19.679269" elapsed="0.377077">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:22.058936" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:22.058356" elapsed="0.000631"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:22.060476" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:22.060070" elapsed="0.000447"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:22.061689" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:22.068940" elapsed="0.001149"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:22.072003" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:22.071168" elapsed="0.000956"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:22.073598" level="INFO">${conn_id} = 386</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:22.072902" elapsed="0.000877"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:22.075849" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:22.075936" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:22.075517" elapsed="0.000459"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:22.076209" elapsed="0.000358"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:22.077475" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:22.403892" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 02:59:22 UTC 2026

  System load:  0.15               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 03:00:19 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:22.077146" elapsed="0.326900"/>
</kw>
<msg time="2026-04-13T03:00:22.404156" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:22.076798" elapsed="0.327447"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:22.074772" elapsed="0.329761"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:22.405833" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:22.428367" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:22.428926" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:22.429255" 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-04-13T03:00:22.405417" elapsed="0.024048"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:22.431298" elapsed="0.000929"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:22.434999" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:22.433299" elapsed="0.001936"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:22.436406" elapsed="0.000072"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:22.435686" elapsed="0.000899"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:22.435522" elapsed="0.001230"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:22.437469" elapsed="0.000079"/>
</return>
<status status="PASS" start="2026-04-13T03:00:22.437074" elapsed="0.000543"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:22.436967" elapsed="0.000791"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:22.437869" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:22.443688" 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-04-13T03:00:22.444454" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:22.444815" elapsed="0.000102"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:22.439490" elapsed="0.005536"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:22.064702" elapsed="0.380549"/>
</kw>
<msg time="2026-04-13T03:00:22.445601" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:22.063654" elapsed="0.382100"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:22.062853" elapsed="0.382988"/>
</kw>
<msg time="2026-04-13T03:00:22.445882" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:22.062094" elapsed="0.383855"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:22.448618" elapsed="0.000335"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:22.449104" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:22.449391" 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-04-13T03:00:22.446233" elapsed="0.003306"/>
</kw>
<msg time="2026-04-13T03:00:22.449691" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:22.060841" elapsed="0.388878"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:22.450140" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:22.449888" elapsed="0.000296"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:22.450227" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:00:22.450381" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:22.059404" elapsed="0.391003"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:22.450454" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T03:00:22.450597" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:22.057816" elapsed="0.392805"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:22.451176" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:22.450779" elapsed="0.000472">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:22.057049" elapsed="0.394313">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:24.455676" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:24.454519" elapsed="0.001245"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:24.458117" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:24.457364" elapsed="0.000824"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:24.460330" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:24.468980" elapsed="0.001113"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:24.471523" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:24.470934" elapsed="0.000725"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:24.473301" level="INFO">${conn_id} = 389</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:24.472470" elapsed="0.000933"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:24.475551" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:24.475648" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:24.475250" elapsed="0.000425"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:24.475879" elapsed="0.000364"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:24.477560" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:25.035979" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 03:00:22 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:24.477078" elapsed="0.559049"/>
</kw>
<msg time="2026-04-13T03:00:25.036212" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:24.476454" elapsed="0.559844"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:24.474445" elapsed="0.562134"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:25.037953" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:25.060775" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:25.061319" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:25.061764" 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-04-13T03:00:25.037485" elapsed="0.024502"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:25.063883" elapsed="0.000865"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:25.066106" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:25.065416" elapsed="0.000840"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:25.066865" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:25.066489" elapsed="0.000488"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:25.066405" elapsed="0.000654"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:25.067594" elapsed="0.000111"/>
</return>
<status status="PASS" start="2026-04-13T03:00:25.067264" elapsed="0.000544"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:25.067196" elapsed="0.000722"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:25.068035" elapsed="0.000056"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:25.074885" elapsed="0.000342"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:25.075488" elapsed="0.000183"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:25.075853" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:25.069726" elapsed="0.006342"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:24.463450" elapsed="0.612843"/>
</kw>
<msg time="2026-04-13T03:00:25.076605" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:24.462748" elapsed="0.613932"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:24.462167" elapsed="0.614597"/>
</kw>
<msg time="2026-04-13T03:00:25.076807" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:24.461474" elapsed="0.615381"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:25.079619" elapsed="0.000333"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:25.080112" elapsed="0.000186"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:25.080434" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:25.077135" elapsed="0.003450"/>
</kw>
<msg time="2026-04-13T03:00:25.080697" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:24.458726" elapsed="0.621998"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:25.081147" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:25.080894" elapsed="0.000298"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:25.081235" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:00:25.081390" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:24.456272" elapsed="0.625144"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:25.081463" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:00:25.081670" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:24.453489" elapsed="0.628210"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:25.082258" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:25.081857" elapsed="0.000477">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:24.452261" elapsed="0.630208">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:27.086064" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:27.085248" elapsed="0.000890"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:27.088265" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:27.087607" elapsed="0.000718"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:27.090118" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:27.097422" elapsed="0.001494"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:27.100846" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:27.100049" elapsed="0.000954"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:27.103217" level="INFO">${conn_id} = 392</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:27.102089" elapsed="0.001267"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:27.105530" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:27.105614" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:27.105239" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:27.105859" elapsed="0.000349"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:27.107289" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:27.419350" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 03:00:25 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:27.106954" elapsed="0.312554"/>
</kw>
<msg time="2026-04-13T03:00:27.419596" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:27.106419" elapsed="0.313295"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:27.104467" elapsed="0.315550"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:27.421327" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:27.443953" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:27.444471" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:27.444853" 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-04-13T03:00:27.420930" elapsed="0.024138"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:27.446875" elapsed="0.001050"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:27.450312" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:27.449110" elapsed="0.001439"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:27.451488" elapsed="0.000067"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:27.450982" elapsed="0.000712"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:27.450819" elapsed="0.001011"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:27.452809" elapsed="0.000132"/>
</return>
<status status="PASS" start="2026-04-13T03:00:27.452147" elapsed="0.000907"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:27.452041" elapsed="0.001147"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:27.453417" elapsed="0.000091"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:27.459104" 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-04-13T03:00:27.459756" elapsed="0.000178"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:27.460114" 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-04-13T03:00:27.455910" elapsed="0.004420"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:27.093480" elapsed="0.367076"/>
</kw>
<msg time="2026-04-13T03:00:27.460955" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:27.092550" elapsed="0.368470"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:27.091836" elapsed="0.369267"/>
</kw>
<msg time="2026-04-13T03:00:27.461145" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:27.090826" elapsed="0.370366"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:27.464068" elapsed="0.000312"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:27.464529" elapsed="0.000161"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:27.464824" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:27.461472" elapsed="0.003499"/>
</kw>
<msg time="2026-04-13T03:00:27.465064" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:27.088863" elapsed="0.376226"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:27.465513" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:27.465264" elapsed="0.000293"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:27.465599" elapsed="0.000112"/>
</return>
<msg time="2026-04-13T03:00:27.465840" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:27.086594" elapsed="0.379272"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:27.465914" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T03:00:27.466061" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:27.084377" elapsed="0.381709"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:27.466619" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:27.466227" elapsed="0.000482">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:27.083291" elapsed="0.383532">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:29.470285" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:29.469514" elapsed="0.000841"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:29.472409" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:29.471748" elapsed="0.000721"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:29.473747" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:29.480788" elapsed="0.001070"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:29.483175" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:29.482611" elapsed="0.000672"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:29.484868" level="INFO">${conn_id} = 395</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:29.484138" elapsed="0.000828"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:29.487075" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:29.487153" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:29.486782" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:29.487372" elapsed="0.000357"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:29.488668" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:29.808646" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 03:00:27 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:29.488330" elapsed="0.320472"/>
</kw>
<msg time="2026-04-13T03:00:29.808887" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:29.487981" elapsed="0.320991"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:29.486028" elapsed="0.323233"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:29.810556" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:29.832861" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:29.833399" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:29.833785" 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-04-13T03:00:29.810157" elapsed="0.023844"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:29.835855" elapsed="0.000940"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:29.838155" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:29.837460" elapsed="0.000849"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:29.838949" elapsed="0.000055"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:29.838538" elapsed="0.000552"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:29.838457" elapsed="0.000721"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:29.839732" elapsed="0.000082"/>
</return>
<status status="PASS" start="2026-04-13T03:00:29.839411" elapsed="0.000472"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:29.839338" elapsed="0.000629"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:29.840079" elapsed="0.000079"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:29.845896" elapsed="0.000354"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:29.846453" elapsed="0.000212"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:29.846855" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:29.841781" elapsed="0.005289"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:29.476769" elapsed="0.370526"/>
</kw>
<msg time="2026-04-13T03:00:29.847607" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:29.475741" elapsed="0.371945"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:29.474940" elapsed="0.372833"/>
</kw>
<msg time="2026-04-13T03:00:29.847815" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:29.474154" elapsed="0.373709"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:29.850734" elapsed="0.000334"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:29.851222" elapsed="0.000154"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:29.851512" elapsed="0.000102"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:29.848244" elapsed="0.003440"/>
</kw>
<msg time="2026-04-13T03:00:29.851783" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:29.472874" elapsed="0.378935"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:29.852285" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:29.851986" elapsed="0.000346"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:29.852378" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:00:29.852538" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:29.470810" elapsed="0.381753"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:29.852612" elapsed="0.000049"/>
</return>
<msg time="2026-04-13T03:00:29.852796" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:29.468736" elapsed="0.384087"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:29.853363" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:29.852967" elapsed="0.000471">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:29.467604" elapsed="0.385947">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:31.856935" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:31.856164" elapsed="0.000840"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:31.859104" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:31.858449" elapsed="0.000716"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:31.860909" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

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

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:31.868537" elapsed="0.001463"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:31.871529" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:31.870929" elapsed="0.000749"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:31.873349" level="INFO">${conn_id} = 398</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:31.872462" elapsed="0.000985"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:31.875581" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:31.875697" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:31.875262" elapsed="0.000461"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:31.875930" elapsed="0.000456"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:31.877576" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:32.195003" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Mon Apr 13 03:00:29 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:31.877197" elapsed="0.317965"/>
</kw>
<msg time="2026-04-13T03:00:32.195249" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:31.876601" elapsed="0.318737"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:31.874462" elapsed="0.321199"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:32.197004" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:32.219723" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:32.220318" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:32.220693" 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-04-13T03:00:32.196573" elapsed="0.024338"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:32.222894" elapsed="0.000992"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:32.225981" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:32.224935" elapsed="0.001280"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:32.227079" elapsed="0.000063"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:32.226559" elapsed="0.000681"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:32.226439" elapsed="0.000924"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:32.228147" elapsed="0.000116"/>
</return>
<status status="PASS" start="2026-04-13T03:00:32.227705" elapsed="0.000662"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:32.227569" elapsed="0.000923"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:32.228693" elapsed="0.000085"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:32.235905" elapsed="0.000358"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:32.236463" elapsed="0.000190"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:32.236831" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:32.231271" elapsed="0.005772"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:31.865455" elapsed="0.371813"/>
</kw>
<msg time="2026-04-13T03:00:32.237746" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:31.863928" elapsed="0.373887"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:31.862730" elapsed="0.375171"/>
</kw>
<msg time="2026-04-13T03:00:32.237946" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:31.861564" elapsed="0.376429"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:32.240642" 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-04-13T03:00:32.241109" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:32.241392" elapsed="0.000135"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:32.238283" elapsed="0.003297"/>
</kw>
<msg time="2026-04-13T03:00:32.241780" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:31.859623" elapsed="0.382184"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:32.242241" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:32.241985" elapsed="0.000302"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:32.242332" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:00:32.242490" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:31.857484" elapsed="0.385031"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:32.242563" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:00:32.242726" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:31.855325" elapsed="0.387426"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:32.243301" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:32.242894" elapsed="0.000481">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:31.854265" elapsed="0.389222">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:34.247141" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:34.246275" elapsed="0.000937"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:34.249211" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:34.248560" elapsed="0.000713"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:34.251043" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:34.251187" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:34.250761" elapsed="0.000463"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:00:34.256714" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:00:34.256079" elapsed="0.000748"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:34.255704" elapsed="0.001205"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:34.258607" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:34.258971" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:34.257987" elapsed="0.001124"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:34.260962" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:34.260181" elapsed="0.000934"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:34.263242" level="INFO">${conn_id} = 401</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:34.262205" elapsed="0.001135"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:34.265385" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:34.265463" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:34.265101" elapsed="0.000386"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:34.265698" elapsed="0.000335"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:34.267088" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:34.589281" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:00:32 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:34.266597" elapsed="0.322938"/>
</kw>
<msg time="2026-04-13T03:00:34.589622" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:34.266238" elapsed="0.323493"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:34.264336" elapsed="0.325672"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:34.591405" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:34.614181" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:34.614661" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:34.614921" 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-04-13T03:00:34.590992" elapsed="0.024080"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:34.616309" elapsed="0.000724"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:34.618349" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:34.617734" elapsed="0.000729"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:34.618964" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:34.618664" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:34.618585" elapsed="0.000518"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:34.619493" elapsed="0.000063"/>
</return>
<status status="PASS" start="2026-04-13T03:00:34.619250" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:34.619200" elapsed="0.000502"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:34.619785" elapsed="0.000039"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:34.627695" 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-04-13T03:00:34.628496" elapsed="0.000381"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:34.629139" 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-04-13T03:00:34.621561" elapsed="0.007872"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:34.253867" elapsed="0.375814"/>
</kw>
<msg time="2026-04-13T03:00:34.630019" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:34.252926" elapsed="0.377185"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:34.252183" elapsed="0.378052"/>
</kw>
<msg time="2026-04-13T03:00:34.630297" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:34.251461" elapsed="0.378908"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:34.634157" elapsed="0.000737"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:34.635116" elapsed="0.000222"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:34.635533" elapsed="0.000182"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:34.630837" elapsed="0.004959"/>
</kw>
<msg time="2026-04-13T03:00:34.635932" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:34.249762" elapsed="0.386208"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:34.636835" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:34.636382" elapsed="0.000526"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:34.636975" elapsed="0.000046"/>
</return>
<msg time="2026-04-13T03:00:34.637206" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:34.247672" elapsed="0.389574"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:34.637321" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T03:00:34.637546" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:34.245401" elapsed="0.392183"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:34.638498" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:34.637918" elapsed="0.000686">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:34.244271" elapsed="0.394537">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:36.642408" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:36.641517" elapsed="0.000965"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:36.645234" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:36.644378" elapsed="0.000934"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:36.647585" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:36.647966" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:36.647138" elapsed="0.000907"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:00:36.653946" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:00:36.653457" elapsed="0.000577"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:36.653130" elapsed="0.000979"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:36.655398" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:36.655691" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:36.654931" elapsed="0.000945"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:36.657503" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:36.656787" elapsed="0.000940"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:36.659408" level="INFO">${conn_id} = 404</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:36.658672" elapsed="0.000843"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:36.661961" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:36.662042" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:36.661463" elapsed="0.000604"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:36.662265" elapsed="0.000418"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:36.663607" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:36.988280" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:00:34 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:36.663255" elapsed="0.325194"/>
</kw>
<msg time="2026-04-13T03:00:36.988554" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:36.662898" elapsed="0.325776"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:36.660700" elapsed="0.328271"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:36.990389" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:37.013416" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:37.013997" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:37.014340" 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-04-13T03:00:36.989924" elapsed="0.024628"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:37.016453" elapsed="0.000889"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:37.018748" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:37.018039" elapsed="0.000862"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:37.019478" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:37.019142" elapsed="0.000450"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:37.019055" elapsed="0.000645"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:37.020311" elapsed="0.000096"/>
</return>
<status status="PASS" start="2026-04-13T03:00:37.019997" elapsed="0.000487"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:37.019878" elapsed="0.000687"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:37.020712" elapsed="0.000075"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:37.028196" 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-04-13T03:00:37.028989" elapsed="0.000189"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:37.029369" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:37.022821" elapsed="0.006764"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:36.651496" elapsed="0.378391"/>
</kw>
<msg time="2026-04-13T03:00:37.030223" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:36.650438" elapsed="0.379859"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:36.649357" elapsed="0.381025"/>
</kw>
<msg time="2026-04-13T03:00:37.030424" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:36.648335" elapsed="0.382135"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:37.033904" 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-04-13T03:00:37.034376" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:37.034674" elapsed="0.000100"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:37.030767" elapsed="0.004059"/>
</kw>
<msg time="2026-04-13T03:00:37.034919" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:36.645945" elapsed="0.388999"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:37.035415" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:37.035136" elapsed="0.000323"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:37.035503" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:00:37.035680" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:36.643089" elapsed="0.392625"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:37.035780" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T03:00:37.036007" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:36.640746" elapsed="0.395299"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:37.036760" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:37.036238" elapsed="0.000618">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:36.639618" elapsed="0.397399">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:39.040616" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:39.039823" elapsed="0.000901"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:39.042704" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:39.042266" elapsed="0.000479"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:39.043863" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:39.044010" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:39.043610" elapsed="0.000438"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:00:39.051804" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:00:39.051101" elapsed="0.000827"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:39.048588" elapsed="0.003425"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:39.053869" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:39.054200" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:39.053195" elapsed="0.001104"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:39.055756" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:39.055082" elapsed="0.000787"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:39.057360" 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-04-13T03:00:39.056639" elapsed="0.000819"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:39.059541" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:39.059620" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:39.059248" elapsed="0.000475"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:39.059923" elapsed="0.000361"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:39.061233" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:39.383592" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:00:36 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:39.060857" elapsed="0.322923"/>
</kw>
<msg time="2026-04-13T03:00:39.383887" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:39.060488" elapsed="0.323497"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:39.058470" elapsed="0.325807"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:39.385590" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:39.408679" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:39.408997" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:39.409157" 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-04-13T03:00:39.385171" elapsed="0.024123"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:39.410228" elapsed="0.000502"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:39.411795" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:39.411291" elapsed="0.000616"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:39.412485" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:39.412101" elapsed="0.000487"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:39.412020" elapsed="0.000648"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:39.413043" elapsed="0.000084"/>
</return>
<status status="PASS" start="2026-04-13T03:00:39.412823" elapsed="0.000364"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:39.412771" elapsed="0.000507"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:39.413372" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:39.418284" 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-04-13T03:00:39.418979" elapsed="0.000197"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:39.419383" elapsed="0.000115"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:39.414598" elapsed="0.005013"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:39.046750" elapsed="0.373142"/>
</kw>
<msg time="2026-04-13T03:00:39.420220" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:39.045782" elapsed="0.374510"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:39.044986" elapsed="0.375402"/>
</kw>
<msg time="2026-04-13T03:00:39.420443" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:39.044253" elapsed="0.376242"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:39.423653" elapsed="0.000350"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:39.424179" elapsed="0.000173"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:39.424496" elapsed="0.000102"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:39.420814" elapsed="0.003854"/>
</kw>
<msg time="2026-04-13T03:00:39.424771" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:39.043043" elapsed="0.381755"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:39.425314" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:39.424987" elapsed="0.000381"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:39.425420" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T03:00:39.425595" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:39.041392" elapsed="0.384229"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:39.425709" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:00:39.425863" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:39.038993" elapsed="0.386896"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:39.426450" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:39.426035" elapsed="0.000492">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:39.037912" elapsed="0.388749">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:41.430678" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:41.429845" elapsed="0.000904"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:41.432190" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:41.431792" elapsed="0.000435"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:41.433359" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:41.433610" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:41.433127" elapsed="0.000540"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:00:41.438850" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:00:41.438201" elapsed="0.000760"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:41.438121" elapsed="0.000923"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:41.441069" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:41.441422" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:41.440125" elapsed="0.001434"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:41.443415" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:41.442716" elapsed="0.000808"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:41.445010" level="INFO">${conn_id} = 410</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:41.444298" elapsed="0.000810"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:41.447288" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:41.447367" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:41.446990" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:41.447590" elapsed="0.000357"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:41.448850" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:41.758689" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:00:39 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:41.448509" elapsed="0.310343"/>
</kw>
<msg time="2026-04-13T03:00:41.758967" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:41.448155" elapsed="0.310914"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:41.446163" elapsed="0.313218"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:41.760723" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:41.783856" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:41.784469" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:41.784846" 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-04-13T03:00:41.760291" elapsed="0.024769"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:41.787024" elapsed="0.000844"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:41.789319" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:41.788612" elapsed="0.000866"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:41.790126" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:41.789776" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:41.789685" elapsed="0.000639"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:41.791015" elapsed="0.000092"/>
</return>
<status status="PASS" start="2026-04-13T03:00:41.790571" elapsed="0.000614"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:41.790464" elapsed="0.000827"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:41.791421" elapsed="0.000066"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:41.797945" elapsed="0.000563"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:41.799157" elapsed="0.000224"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:41.799567" elapsed="0.000130"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:41.793161" elapsed="0.006649"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:41.436269" elapsed="0.363771"/>
</kw>
<msg time="2026-04-13T03:00:41.800372" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:41.435335" elapsed="0.365110"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:41.434584" elapsed="0.365952"/>
</kw>
<msg time="2026-04-13T03:00:41.800581" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:41.433875" elapsed="0.366770"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:41.803503" elapsed="0.000377"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:41.804040" elapsed="0.000165"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:41.804347" elapsed="0.000104"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:41.800953" elapsed="0.003556"/>
</kw>
<msg time="2026-04-13T03:00:41.804606" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:41.432520" elapsed="0.372127"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:41.805096" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:41.804833" elapsed="0.000308"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:41.805190" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T03:00:41.805408" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:41.431182" elapsed="0.374253"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:41.805485" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:00:41.805665" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:41.429022" elapsed="0.376670"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:41.806254" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:41.805843" elapsed="0.000486">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:41.427911" elapsed="0.378532">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:43.809891" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:43.809126" elapsed="0.000836"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:43.812311" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:43.811455" elapsed="0.000908"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:43.813750" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:43.813945" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:43.813435" elapsed="0.000563"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:00:43.820463" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:00:43.819699" elapsed="0.001003"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:43.819511" elapsed="0.001275"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:43.822739" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:43.823005" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:43.821756" elapsed="0.001352"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:43.824870" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:43.824104" elapsed="0.000907"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:43.826695" level="INFO">${conn_id} = 413</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:43.825937" elapsed="0.000858"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:43.829096" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:43.829178" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:43.828789" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:43.829409" elapsed="0.000385"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:43.830731" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:44.149125" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:00:41 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:43.830363" elapsed="0.319066"/>
</kw>
<msg time="2026-04-13T03:00:44.149557" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:43.830004" elapsed="0.319700"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:43.827996" elapsed="0.322160"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:44.152127" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:44.175456" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:44.176186" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:44.176545" 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-04-13T03:00:44.151481" elapsed="0.025337"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:44.178771" elapsed="0.001300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:44.181704" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:44.180963" elapsed="0.000931"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:44.182526" elapsed="0.000047"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:44.182174" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:44.182080" elapsed="0.000671"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:44.183263" elapsed="0.000106"/>
</return>
<status status="PASS" start="2026-04-13T03:00:44.182967" elapsed="0.000484"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:44.182895" elapsed="0.000645"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:44.183684" elapsed="0.000058"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:44.190783" 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-04-13T03:00:44.191758" elapsed="0.000347"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:44.192375" elapsed="0.000111"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:44.185620" elapsed="0.006981"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:43.817202" elapsed="0.375654"/>
</kw>
<msg time="2026-04-13T03:00:44.193256" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:43.816196" elapsed="0.377132"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:43.815311" elapsed="0.378109"/>
</kw>
<msg time="2026-04-13T03:00:44.193463" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:43.814282" elapsed="0.379230"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:44.196337" elapsed="0.000400"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:44.196895" elapsed="0.000155"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:44.197189" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:44.193895" elapsed="0.003448"/>
</kw>
<msg time="2026-04-13T03:00:44.197440" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:43.812749" elapsed="0.384717"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:44.197929" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:44.197666" elapsed="0.000310"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:44.198026" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T03:00:44.198192" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:43.810390" elapsed="0.387828"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:44.198265" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:00:44.198417" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:43.808325" elapsed="0.390118"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:44.199046" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:44.198585" elapsed="0.000550">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:43.807241" elapsed="0.392032">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:46.202936" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:46.202057" elapsed="0.000968"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:46.205444" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:46.204685" elapsed="0.000825"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:46.207559" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:46.207862" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:46.207159" elapsed="0.000766"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:00:46.212814" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:00:46.212313" elapsed="0.000616"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:46.212243" elapsed="0.000754"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:46.214559" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:46.214856" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:46.213805" elapsed="0.001164"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:46.216465" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:46.215825" elapsed="0.000753"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:46.218224" level="INFO">${conn_id} = 416</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:46.217463" elapsed="0.000870"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:46.220489" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:46.220566" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:46.220198" elapsed="0.000392"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:46.220846" elapsed="0.000399"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:46.222215" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:46.537186" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:00:44 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:46.221886" elapsed="0.315468"/>
</kw>
<msg time="2026-04-13T03:00:46.537442" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:46.221454" elapsed="0.316085"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:46.219379" elapsed="0.318498"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:46.539178" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:46.562092" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:46.562600" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:46.562988" 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-04-13T03:00:46.538783" elapsed="0.024419"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:46.565076" elapsed="0.000973"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:46.568120" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:46.567116" elapsed="0.001238"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:46.569388" elapsed="0.000069"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:46.568820" elapsed="0.000701"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:46.568581" elapsed="0.000997"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:46.569944" elapsed="0.000056"/>
</return>
<status status="PASS" start="2026-04-13T03:00:46.569741" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:46.569690" elapsed="0.000417"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:46.570188" elapsed="0.000037"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:46.574467" 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-04-13T03:00:46.575009" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:46.575349" elapsed="0.000099"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:46.571328" elapsed="0.004233"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:46.210856" elapsed="0.364957"/>
</kw>
<msg time="2026-04-13T03:00:46.576123" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:46.210112" elapsed="0.366072"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:46.209531" elapsed="0.366737"/>
</kw>
<msg time="2026-04-13T03:00:46.576309" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:46.208272" elapsed="0.368082"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:46.579176" elapsed="0.000309"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:46.579658" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:46.579940" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:46.576834" elapsed="0.003253"/>
</kw>
<msg time="2026-04-13T03:00:46.580178" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:46.206070" elapsed="0.374133"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:46.580609" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:46.580362" elapsed="0.000348"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:46.580754" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:00:46.580908" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:46.203554" elapsed="0.377379"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:46.580979" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T03:00:46.581168" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:46.201165" elapsed="0.380029"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:46.581745" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:46.581337" elapsed="0.000483">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:46.200106" elapsed="0.381826">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:48.585545" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:48.584700" elapsed="0.000917"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:48.587712" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:48.587072" elapsed="0.000702"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:48.589511" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:48.589777" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:48.589166" elapsed="0.000860"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:00:48.594530" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:00:48.594025" elapsed="0.000588"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:48.593673" elapsed="0.001023"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:48.596008" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:48.596255" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:48.595535" elapsed="0.000819"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:48.597794" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:48.597150" elapsed="0.000755"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:48.599512" 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-04-13T03:00:48.598809" elapsed="0.000802"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:48.601690" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:48.601770" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:48.601367" elapsed="0.000428"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:48.601993" elapsed="0.000466"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:48.603523" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:48.921893" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:00:46 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:48.603192" elapsed="0.318853"/>
</kw>
<msg time="2026-04-13T03:00:48.922139" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:48.602834" elapsed="0.319392"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:48.600604" elapsed="0.321929"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:48.923831" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:48.946093" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:48.946751" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:48.947094" 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-04-13T03:00:48.923422" elapsed="0.023881"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:48.949087" elapsed="0.000883"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:48.951612" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:48.951005" elapsed="0.000796"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:48.952347" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:48.952028" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:48.951948" elapsed="0.000584"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:48.953085" elapsed="0.000072"/>
</return>
<status status="PASS" start="2026-04-13T03:00:48.952803" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:48.952734" elapsed="0.000572"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:48.953445" elapsed="0.000063"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:48.959187" elapsed="0.000336"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:48.959745" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:48.960090" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:48.955082" elapsed="0.005218"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:48.592305" elapsed="0.368214"/>
</kw>
<msg time="2026-04-13T03:00:48.960946" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:48.591551" elapsed="0.369455"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:48.591024" elapsed="0.370065"/>
</kw>
<msg time="2026-04-13T03:00:48.961130" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:48.590420" elapsed="0.370757"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:48.963906" elapsed="0.000322"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:48.964379" elapsed="0.000151"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:48.964719" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:48.961455" elapsed="0.003417"/>
</kw>
<msg time="2026-04-13T03:00:48.965029" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:48.588232" elapsed="0.376824"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:48.965538" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:48.965262" elapsed="0.000324"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:48.965650" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T03:00:48.965815" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:48.586098" elapsed="0.379743"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:48.965891" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:00:48.966041" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:48.583881" elapsed="0.382185"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:48.966669" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:48.966212" elapsed="0.000532">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:48.582791" elapsed="0.384066">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:50.970250" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:50.969486" elapsed="0.000833"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:50.972190" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:50.971794" elapsed="0.000434"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:50.973320" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:50.973465" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:50.973090" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:00:50.979273" elapsed="0.000062"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:00:50.978555" elapsed="0.000848"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:50.978177" elapsed="0.001376"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:50.980868" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:50.981114" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:50.980406" elapsed="0.000806"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:50.982537" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:50.981996" elapsed="0.000667"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:50.984196" level="INFO">${conn_id} = 422</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:50.983428" elapsed="0.000873"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:50.986500" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:50.986580" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:50.986204" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:50.986837" elapsed="0.000345"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:50.988159" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:51.305407" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:00:48 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:50.987827" elapsed="0.317855"/>
</kw>
<msg time="2026-04-13T03:00:51.305774" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:50.987390" elapsed="0.318477"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:50.985352" elapsed="0.320798"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:51.307617" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:51.330686" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:51.331216" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:51.331554" 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-04-13T03:00:51.307194" elapsed="0.024837"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:51.333830" elapsed="0.000920"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:51.336847" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:51.335846" elapsed="0.001237"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:51.337975" elapsed="0.000069"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:51.337438" elapsed="0.000710"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:51.337313" elapsed="0.000962"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:51.339079" elapsed="0.000115"/>
</return>
<status status="PASS" start="2026-04-13T03:00:51.338594" elapsed="0.000712"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:51.338487" elapsed="0.000946"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:51.339610" elapsed="0.000257"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:51.344520" elapsed="0.000357"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:51.345085" elapsed="0.000171"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:51.345434" elapsed="0.000102"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:51.341438" elapsed="0.004221"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:50.976341" elapsed="0.369545"/>
</kw>
<msg time="2026-04-13T03:00:51.346188" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:50.975264" elapsed="0.370985"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:50.974482" elapsed="0.371849"/>
</kw>
<msg time="2026-04-13T03:00:51.346373" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:50.973747" elapsed="0.372672"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:51.349095" elapsed="0.000313"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:51.349556" elapsed="0.000162"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:51.349854" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:51.346713" elapsed="0.003291"/>
</kw>
<msg time="2026-04-13T03:00:51.350096" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:50.972513" elapsed="0.377609"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:51.350538" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:51.350287" elapsed="0.000296"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:51.350640" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:00:51.350797" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:50.970782" elapsed="0.380041"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:51.350870" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:00:51.351016" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:50.968702" elapsed="0.382339"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:51.351817" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:51.351245" elapsed="0.000650">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:50.967675" elapsed="0.384336">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:53.356036" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:53.355125" elapsed="0.000988"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:53.358371" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:53.357668" elapsed="0.000771"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:53.360430" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:53.361882" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:53.360061" elapsed="0.001865"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:00:53.368059" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:00:53.367516" elapsed="0.000641"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:53.365255" elapsed="0.002966"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:53.369565" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:53.369878" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:53.369066" elapsed="0.000940"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:53.371387" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:53.370801" elapsed="0.000695"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:53.373114" level="INFO">${conn_id} = 425</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:53.372277" elapsed="0.000950"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:53.375421" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:53.375518" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:53.375114" elapsed="0.000431"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:53.375799" elapsed="0.000375"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:53.377281" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:53.698335" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:00:51 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:53.376938" elapsed="0.321544"/>
</kw>
<msg time="2026-04-13T03:00:53.698565" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:53.376385" elapsed="0.322281"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:53.374322" elapsed="0.324623"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:53.700387" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:53.723368" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:53.723919" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:53.724246" 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-04-13T03:00:53.700005" elapsed="0.024450"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:53.726264" elapsed="0.000878"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:53.729247" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:53.728189" elapsed="0.001296"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:53.730185" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:53.729866" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:53.729767" elapsed="0.000604"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:53.730897" elapsed="0.000071"/>
</return>
<status status="PASS" start="2026-04-13T03:00:53.730595" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:53.730528" elapsed="0.000590"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:53.731228" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:53.737245" 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-04-13T03:00:53.737994" elapsed="0.000223"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:53.738464" elapsed="0.000142"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:00:53.733014" elapsed="0.005764"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:53.363913" elapsed="0.375172"/>
</kw>
<msg time="2026-04-13T03:00:53.739507" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:53.363202" elapsed="0.376383"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:53.362618" elapsed="0.377103"/>
</kw>
<msg time="2026-04-13T03:00:53.739780" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:53.362084" elapsed="0.377767"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:53.743160" elapsed="0.000312"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:53.743646" elapsed="0.000156"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:53.743937" 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-04-13T03:00:53.740235" elapsed="0.003851"/>
</kw>
<msg time="2026-04-13T03:00:53.744179" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:53.359028" elapsed="0.385177"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:53.744614" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:53.744366" elapsed="0.000330"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:53.744739" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:00:53.744890" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:53.356584" elapsed="0.388331"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:53.744979" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:00:53.745125" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:53.354101" elapsed="0.391049"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:53.745701" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:53.745290" elapsed="0.000488">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:53.352927" elapsed="0.392967">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:55.748476" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:55.747917" elapsed="0.000613"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:55.750066" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:55.749611" elapsed="0.000498"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:55.751275" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:55.751434" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:55.751021" elapsed="0.000454"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:00:55.757072" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:00:55.756364" elapsed="0.000846"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:55.756278" elapsed="0.001007"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:55.759233" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:55.759606" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:55.758128" elapsed="0.001648"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:55.761811" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:55.760838" elapsed="0.001143"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:55.764293" level="INFO">${conn_id} = 428</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:00:55.763146" elapsed="0.001294"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:55.767747" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:55.767865" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:55.767253" elapsed="0.000644"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:55.768180" elapsed="0.000542"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:55.770058" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:00:56.095313" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:00:53 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:55.769445" elapsed="0.326116"/>
</kw>
<msg time="2026-04-13T03:00:56.095746" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:55.769017" elapsed="0.326883"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:55.766110" elapsed="0.330339"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:00:56.099164" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:00:56.122328" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:00:56.122657" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:00:56.122827" 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-04-13T03:00:56.098589" elapsed="0.024341"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:56.123802" elapsed="0.000495"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:56.125289" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:56.124814" elapsed="0.000581"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:56.125959" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:00:56.125567" elapsed="0.000477"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:56.125504" elapsed="0.000600"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:00:56.126503" elapsed="0.000060"/>
</return>
<status status="PASS" start="2026-04-13T03:00:56.126291" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:56.126237" elapsed="0.000458"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:00:56.126813" elapsed="0.000039"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:56.132732" 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-04-13T03:00:56.133546" elapsed="0.000286"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:56.134109" 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-04-13T03:00:56.128018" 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-04-13T03:00:55.754330" elapsed="0.380530"/>
</kw>
<msg time="2026-04-13T03:00:56.135188" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:55.753241" elapsed="0.382011"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:55.752424" elapsed="0.382915"/>
</kw>
<msg time="2026-04-13T03:00:56.135381" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:55.751716" elapsed="0.383714"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:56.138222" 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-04-13T03:00:56.138703" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:00:56.138985" 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-04-13T03:00:56.135865" elapsed="0.003269"/>
</kw>
<msg time="2026-04-13T03:00:56.139229" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:55.750416" elapsed="0.388838"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:56.139698" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:56.139422" elapsed="0.000321"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:00:56.139786" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:00:56.139942" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:55.748971" elapsed="0.390996"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:00:56.140016" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:00:56.140162" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:55.747361" elapsed="0.392826"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:00:56.140748" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:00:56.140327" elapsed="0.000502">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:55.746532" elapsed="0.394416">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:00:58.144496" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:00:58.143729" elapsed="0.000838"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:00:58.146556" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:00:58.145949" elapsed="0.000667"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:58.148430" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:58.148707" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:58.148192" elapsed="0.000554"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:00:58.153862" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:00:58.153236" elapsed="0.000738"/>
</branch>
<status status="PASS" start="2026-04-13T03:00:58.153157" elapsed="0.000907"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:58.156108" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:00:58.156454" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:00:58.155139" elapsed="0.001453"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:00:58.158471" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:00:58.157711" elapsed="0.000912"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:00:58.160529" 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-04-13T03:00:58.159758" elapsed="0.000951"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:00:58.162755" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:00:58.162836" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:00:58.162451" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:58.163057" elapsed="0.000365"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:00:58.164325" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:01.730431" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:00:56 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:00:58.164000" elapsed="3.566592"/>
</kw>
<msg time="2026-04-13T03:01:01.730698" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:58.163649" elapsed="3.567587"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:00:58.161701" elapsed="3.569832"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:01.732856" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:01.756234" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:01.756858" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:01.757197" 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-04-13T03:01:01.732443" elapsed="0.025006"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:01.759262" elapsed="0.000935"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:01.762383" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:01.761304" elapsed="0.001317"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:01.763520" elapsed="0.000069"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:01.763016" elapsed="0.000707"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:01.762888" elapsed="0.000965"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:01.764659" elapsed="0.000123"/>
</return>
<status status="PASS" start="2026-04-13T03:01:01.764180" elapsed="0.000712"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:01.764072" elapsed="0.000952"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:01.765206" elapsed="0.000135"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:01.771536" 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-04-13T03:01:01.772381" elapsed="0.000228"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:01.772886" 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-04-13T03:01:01.767264" elapsed="0.005920"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:00:58.151329" elapsed="3.622242"/>
</kw>
<msg time="2026-04-13T03:01:01.774086" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:58.150389" elapsed="3.623782"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:00:58.149663" elapsed="3.624615"/>
</kw>
<msg time="2026-04-13T03:01:01.774320" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:00:58.148954" elapsed="3.625412"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:01.776985" elapsed="0.000329"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:01.777464" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:01.777827" 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-04-13T03:01:01.774661" elapsed="0.003317"/>
</kw>
<msg time="2026-04-13T03:01:01.778071" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:00:58.147208" elapsed="3.630888"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:01.778545" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:01.778289" elapsed="0.000301"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:01.778680" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:01:01.778836" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:00:58.145034" elapsed="3.633828"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:01.778909" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:01:01.779055" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:00:58.142792" elapsed="3.636287"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:01.779622" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:01.779221" elapsed="0.000496">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:00:58.141752" elapsed="3.638080">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:03.783426" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:03.782607" elapsed="0.000897"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:03.785765" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:03.785021" elapsed="0.000810"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:03.787842" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:03.788097" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:03.787423" elapsed="0.000740"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:03.796181" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:03.795735" elapsed="0.000612"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:03.795675" elapsed="0.000732"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:03.797892" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:03.798156" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:03.797193" elapsed="0.001063"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:03.799676" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:03.799089" elapsed="0.000704"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:03.801263" level="INFO">${conn_id} = 434</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:03.800556" elapsed="0.000805"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:03.803453" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:03.803531" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:03.803163" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:03.803772" elapsed="0.000340"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:03.805012" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:04.109788" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:01 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:03.804685" elapsed="0.305280"/>
</kw>
<msg time="2026-04-13T03:01:04.110071" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:03.804322" elapsed="0.305856"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:03.802406" elapsed="0.308174"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:04.112066" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:04.134767" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:04.135271" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:04.135608" 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-04-13T03:01:04.111677" elapsed="0.024195"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:04.137697" elapsed="0.000956"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:04.140747" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:04.139725" elapsed="0.001260"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:04.141972" elapsed="0.000068"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:04.141340" elapsed="0.000804"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:04.141217" elapsed="0.001054"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:04.143106" elapsed="0.000116"/>
</return>
<status status="PASS" start="2026-04-13T03:01:04.142620" elapsed="0.000710"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:04.142484" elapsed="0.000978"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:04.143670" elapsed="0.000089"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:04.150009" elapsed="0.000380"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:04.150606" elapsed="0.000178"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:04.150963" elapsed="0.000100"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:04.146369" elapsed="0.004801"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:03.792924" elapsed="0.358472"/>
</kw>
<msg time="2026-04-13T03:01:04.151783" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:03.791256" elapsed="0.360588"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:03.789860" elapsed="0.362068"/>
</kw>
<msg time="2026-04-13T03:01:04.151970" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:03.788573" elapsed="0.363444"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:04.154806" 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-04-13T03:01:04.155278" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:04.155559" elapsed="0.000113"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:04.152301" elapsed="0.003425"/>
</kw>
<msg time="2026-04-13T03:01:04.155820" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:03.786363" elapsed="0.369483"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:04.156266" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:04.156015" elapsed="0.000305"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:04.156364" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:01:04.156519" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:03.784005" elapsed="0.372539"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:04.156592" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:01:04.156768" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:03.781702" elapsed="0.375091"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:04.157338" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:04.156936" elapsed="0.000479">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:03.780586" elapsed="0.376945">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:06.160444" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:06.159789" elapsed="0.000716"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:06.162168" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:06.161681" elapsed="0.000534"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:06.163526" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:06.163796" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:06.163245" elapsed="0.000600"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:06.171219" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:06.170346" elapsed="0.001036"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:06.169747" elapsed="0.001741"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:06.173504" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:06.173849" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:06.172890" elapsed="0.001082"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:06.175610" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:06.174887" elapsed="0.000881"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:06.177691" level="INFO">${conn_id} = 437</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:06.176786" elapsed="0.001005"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:06.180216" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:06.180302" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:06.179877" elapsed="0.000452"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:06.180557" elapsed="0.000478"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:06.182078" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:06.511680" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:04 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:06.181713" elapsed="0.330144"/>
</kw>
<msg time="2026-04-13T03:01:06.511945" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:06.181265" elapsed="0.330767"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:06.178943" elapsed="0.333378"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:06.513662" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:06.536666" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:06.537311" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:06.537710" 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-04-13T03:01:06.513209" elapsed="0.024717"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:06.539885" elapsed="0.000916"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:06.542355" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:06.541507" elapsed="0.001007"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:06.543313" elapsed="0.000047"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:06.542971" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:06.542883" elapsed="0.000631"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:06.544076" elapsed="0.000084"/>
</return>
<status status="PASS" start="2026-04-13T03:01:06.543759" elapsed="0.000471"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:06.543684" elapsed="0.000632"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:06.544433" elapsed="0.000054"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:06.549966" elapsed="0.000339"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:06.550499" elapsed="0.000255"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:06.550934" elapsed="0.000107"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:06.546119" elapsed="0.005032"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:06.167154" elapsed="0.384218"/>
</kw>
<msg time="2026-04-13T03:01:06.551692" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:06.166038" elapsed="0.385717"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:06.165038" elapsed="0.386816"/>
</kw>
<msg time="2026-04-13T03:01:06.551896" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:06.164144" elapsed="0.387799"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:06.554618" elapsed="0.000421"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:06.555191" elapsed="0.000150"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:06.555476" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:06.552289" elapsed="0.003352"/>
</kw>
<msg time="2026-04-13T03:01:06.555740" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:06.162577" elapsed="0.393188"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:06.556334" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:06.556075" elapsed="0.000303"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:06.556467" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:01:06.556646" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:06.160923" elapsed="0.395750"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:06.556722" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:01:06.556868" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:06.159158" elapsed="0.397734"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:06.557550" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:06.557048" elapsed="0.000644">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:06.158244" elapsed="0.399566">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:08.561365" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:08.560461" elapsed="0.000975"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:08.562755" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:08.562349" elapsed="0.000444"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:08.563943" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:08.564090" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:08.563708" elapsed="0.000418"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:08.569576" elapsed="0.000085"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:08.568940" elapsed="0.000785"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:08.568519" elapsed="0.001290"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:08.571591" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:08.571958" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:08.570893" elapsed="0.001203"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:08.573866" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:08.573219" elapsed="0.000757"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:08.575490" 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-04-13T03:01:08.574753" elapsed="0.000834"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:08.577821" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:08.577898" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:08.577478" elapsed="0.000444"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:08.578119" elapsed="0.000431"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:08.579465" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:08.922190" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:06 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:08.579133" elapsed="0.343221"/>
</kw>
<msg time="2026-04-13T03:01:08.922443" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:08.578776" elapsed="0.343760"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:08.576676" elapsed="0.346184"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:08.924172" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:08.946495" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:08.947125" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:08.947483" 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-04-13T03:01:08.923770" elapsed="0.024024"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:08.949773" elapsed="0.000623"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:08.951927" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:08.951179" elapsed="0.000927"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:08.952826" elapsed="0.000051"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:08.952401" elapsed="0.000557"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:08.952287" elapsed="0.000771"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:08.953695" elapsed="0.000082"/>
</return>
<status status="PASS" start="2026-04-13T03:01:08.953325" elapsed="0.000523"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:08.953244" elapsed="0.000688"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:08.954062" elapsed="0.000062"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:08.961229" elapsed="0.000533"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:08.962004" elapsed="0.000198"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:08.962431" elapsed="0.000110"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:08.956233" elapsed="0.006446"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:08.566732" elapsed="0.396218"/>
</kw>
<msg time="2026-04-13T03:01:08.963297" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:08.565794" elapsed="0.397577"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:08.565053" elapsed="0.398416"/>
</kw>
<msg time="2026-04-13T03:01:08.963517" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:08.564328" elapsed="0.399246"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:08.966793" elapsed="0.000369"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:08.967343" elapsed="0.000183"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:08.967716" elapsed="0.000122"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:08.964007" elapsed="0.003888"/>
</kw>
<msg time="2026-04-13T03:01:08.968070" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:08.563080" elapsed="0.405021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:08.968616" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:08.968309" elapsed="0.000375"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:08.968729" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:01:08.968904" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:08.561793" elapsed="0.407137"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:08.968979" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:01:08.969160" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:08.559671" elapsed="0.409519"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:08.969849" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:08.969361" elapsed="0.000571">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:08.558563" elapsed="0.411509">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:10.973712" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:10.972875" elapsed="0.000913"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:10.975905" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:10.975264" elapsed="0.000702"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:10.977740" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:10.977973" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:10.977361" elapsed="0.000673"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:10.986211" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:10.985726" elapsed="0.000566"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:10.983758" elapsed="0.002595"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:10.987588" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:10.987849" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:10.987139" elapsed="0.000809"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:10.989264" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:10.988720" elapsed="0.000653"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:10.990951" level="INFO">${conn_id} = 443</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:10.990152" elapsed="0.000896"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:10.993085" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:10.993161" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:10.992797" elapsed="0.000388"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:10.993379" elapsed="0.000362"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:10.994771" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:11.322547" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:08 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:10.994325" elapsed="0.328553"/>
</kw>
<msg time="2026-04-13T03:01:11.322995" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:10.993948" elapsed="0.329165"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:10.992040" elapsed="0.331450"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:11.325272" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:11.348513" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:11.349020" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:11.349257" 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-04-13T03:01:11.324720" elapsed="0.024690"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:11.350704" elapsed="0.000754"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:11.353112" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:11.352291" elapsed="0.001013"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:11.354017" elapsed="0.000057"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:11.353575" elapsed="0.000584"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:11.353480" elapsed="0.000786"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:11.354966" elapsed="0.000103"/>
</return>
<status status="PASS" start="2026-04-13T03:01:11.354574" elapsed="0.000586"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:11.354490" elapsed="0.000779"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:11.355405" elapsed="0.000061"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:11.363161" 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-04-13T03:01:11.363954" elapsed="0.000231"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:11.364441" 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-04-13T03:01:11.357262" elapsed="0.007473"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:10.982225" elapsed="0.382744"/>
</kw>
<msg time="2026-04-13T03:01:11.365289" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:10.980725" elapsed="0.384633"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:10.979493" elapsed="0.385951"/>
</kw>
<msg time="2026-04-13T03:01:11.365485" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:10.978374" elapsed="0.387158"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:11.368986" elapsed="0.000331"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:11.369470" elapsed="0.000152"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:11.369777" 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-04-13T03:01:11.366012" elapsed="0.003916"/>
</kw>
<msg time="2026-04-13T03:01:11.370024" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:10.976416" elapsed="0.393633"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:11.370550" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:11.370233" elapsed="0.000363"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:11.370736" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:01:11.370932" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:10.974293" elapsed="0.396667"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:11.371009" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:01:11.371159" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:10.971977" elapsed="0.399207"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:11.371823" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:11.371399" elapsed="0.000501">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:10.970886" elapsed="0.401129">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:13.375801" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:13.374793" elapsed="0.001071"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:13.377176" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:13.376762" elapsed="0.000453"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:13.378335" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:13.378505" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:13.378102" elapsed="0.000444"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:13.384102" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:13.383426" elapsed="0.000789"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:13.383347" elapsed="0.000951"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:13.386379" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:13.386834" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:13.385372" elapsed="0.001688"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:13.388915" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:13.388333" elapsed="0.000714"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:13.390597" level="INFO">${conn_id} = 446</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:13.389855" elapsed="0.000948"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:13.392999" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:13.393082" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:13.392694" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:13.393322" elapsed="0.000385"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:13.394825" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:13.711963" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:11 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:13.394346" elapsed="0.317790"/>
</kw>
<msg time="2026-04-13T03:01:13.712230" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:13.393954" elapsed="0.318370"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:13.391864" elapsed="0.320762"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:13.713995" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:13.737389" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:13.737771" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:13.737996" 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-04-13T03:01:13.713560" elapsed="0.024579"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:13.739296" elapsed="0.000687"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:13.741382" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:13.740718" elapsed="0.000828"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:13.742173" elapsed="0.000051"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:13.741818" elapsed="0.000483"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:13.741729" elapsed="0.000663"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:13.742960" elapsed="0.000083"/>
</return>
<status status="PASS" start="2026-04-13T03:01:13.742620" elapsed="0.000503"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:13.742543" elapsed="0.000676"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:13.743347" elapsed="0.000059"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:13.749922" 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-04-13T03:01:13.750865" elapsed="0.000244"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:13.751378" elapsed="0.000156"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:13.745074" elapsed="0.006671"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:13.381510" elapsed="0.370571"/>
</kw>
<msg time="2026-04-13T03:01:13.752528" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:13.380543" elapsed="0.372075"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:13.379753" elapsed="0.373010"/>
</kw>
<msg time="2026-04-13T03:01:13.752827" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:13.378819" elapsed="0.374079"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:13.756952" 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-04-13T03:01:13.757660" elapsed="0.000219"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:13.758081" 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-04-13T03:01:13.753310" elapsed="0.005003"/>
</kw>
<msg time="2026-04-13T03:01:13.758451" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:13.377510" elapsed="0.380980"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:13.759188" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:13.758816" elapsed="0.000441"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:13.759320" elapsed="0.000044"/>
</return>
<msg time="2026-04-13T03:01:13.759550" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:13.376156" elapsed="0.383433"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:13.759692" elapsed="0.000047"/>
</return>
<msg time="2026-04-13T03:01:13.759922" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:13.373915" elapsed="0.386045"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:13.760781" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:13.760172" elapsed="0.000719">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:13.372813" elapsed="0.388247">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:15.764425" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:15.763678" elapsed="0.000817"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:15.766714" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:15.766072" elapsed="0.000705"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:15.768491" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:15.768813" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:15.768151" elapsed="0.000733"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:15.774535" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:15.773933" elapsed="0.000733"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:15.773854" elapsed="0.000896"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:15.776860" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:15.777208" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:15.775871" elapsed="0.001476"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:15.779229" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:15.778422" elapsed="0.000958"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:15.781616" level="INFO">${conn_id} = 449</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:15.780489" elapsed="0.001286"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:15.783853" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:15.783932" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:15.783542" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:15.784153" elapsed="0.000349"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:15.785596" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:16.108870" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:13 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:15.785269" elapsed="0.323775"/>
</kw>
<msg time="2026-04-13T03:01:16.109130" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:15.784914" elapsed="0.324300"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:15.782786" elapsed="0.326707"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:16.110795" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:16.133221" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:16.133835" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:16.134169" 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-04-13T03:01:16.110385" elapsed="0.023992"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:16.136194" elapsed="0.001001"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:16.138815" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:16.138138" elapsed="0.000830"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:16.139596" elapsed="0.000066"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:16.139192" elapsed="0.000538"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:16.139114" elapsed="0.000697"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:16.140304" elapsed="0.000076"/>
</return>
<status status="PASS" start="2026-04-13T03:01:16.140019" elapsed="0.000429"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:16.139950" elapsed="0.000582"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:16.140672" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:16.146406" elapsed="0.000447"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:16.147058" elapsed="0.000167"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:16.147402" elapsed="0.000101"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:16.142303" elapsed="0.005314"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:15.771872" elapsed="0.375988"/>
</kw>
<msg time="2026-04-13T03:01:16.148163" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:15.770923" elapsed="0.377301"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:15.770163" elapsed="0.378145"/>
</kw>
<msg time="2026-04-13T03:01:16.148349" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:15.769212" elapsed="0.379185"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:16.151137" 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-04-13T03:01:16.151609" elapsed="0.000162"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:16.151904" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:16.148689" elapsed="0.003365"/>
</kw>
<msg time="2026-04-13T03:01:16.152149" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:15.767236" elapsed="0.384939"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:16.152583" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:16.152334" elapsed="0.000308"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:16.152687" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:01:16.152847" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:15.765144" elapsed="0.387728"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:16.152949" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:01:16.153100" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:15.762864" elapsed="0.390262"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:16.153671" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:16.153266" elapsed="0.000478">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:15.761841" elapsed="0.392024">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:18.157228" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:18.156473" elapsed="0.000825"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:18.159191" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:18.158714" elapsed="0.000517"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:18.160378" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:18.160666" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:18.160150" elapsed="0.000559"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:18.166399" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:18.165496" elapsed="0.001029"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:18.165413" elapsed="0.001197"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:18.168349" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:18.168701" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:18.167499" elapsed="0.001304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:18.170288" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:18.169588" elapsed="0.000817"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:18.171979" level="INFO">${conn_id} = 452</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:18.171196" elapsed="0.000887"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:18.174439" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:18.174525" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:18.174122" elapsed="0.000428"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:18.174777" elapsed="0.000383"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:18.176328" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:18.502275" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:16 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:18.175978" elapsed="0.326449"/>
</kw>
<msg time="2026-04-13T03:01:18.502535" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:18.175553" elapsed="0.327066"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:18.173210" elapsed="0.329710"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:18.504180" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:18.527298" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:18.527849" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:18.528176" 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-04-13T03:01:18.503796" elapsed="0.024586"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:18.530147" elapsed="0.001618"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:18.533878" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:18.532898" elapsed="0.001209"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:18.535029" elapsed="0.000066"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:18.534513" elapsed="0.000683"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:18.534377" elapsed="0.000941"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:18.536116" elapsed="0.000115"/>
</return>
<status status="PASS" start="2026-04-13T03:01:18.535625" elapsed="0.000712"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:18.535521" elapsed="0.000940"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:18.536805" elapsed="0.000093"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:18.542289" elapsed="0.000367"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:18.542951" elapsed="0.000175"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:18.543309" elapsed="0.000105"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:18.539193" elapsed="0.004331"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:18.163470" elapsed="0.380298"/>
</kw>
<msg time="2026-04-13T03:01:18.544082" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:18.162483" elapsed="0.381662"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:18.161684" elapsed="0.382548"/>
</kw>
<msg time="2026-04-13T03:01:18.544275" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:18.160931" elapsed="0.383393"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:18.547076" elapsed="0.000329"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:18.547559" elapsed="0.000171"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:18.547885" elapsed="0.000130"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:18.544690" elapsed="0.003390"/>
</kw>
<msg time="2026-04-13T03:01:18.548180" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:18.159537" elapsed="0.388670"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:18.548821" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:18.548409" elapsed="0.000461"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:18.548919" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T03:01:18.549108" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:18.157753" elapsed="0.391381"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:18.549184" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:01:18.549334" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:18.155695" elapsed="0.393664"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:18.549930" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:18.549506" elapsed="0.000524">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:18.154681" elapsed="0.395465">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:20.553971" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:20.553141" elapsed="0.000905"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:20.556142" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:20.555563" elapsed="0.000617"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:20.557275" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:20.557419" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:20.557053" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:20.562931" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:20.562281" elapsed="0.000843"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:20.561886" elapsed="0.001326"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:20.565165" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:20.565501" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:20.564529" elapsed="0.001155"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:20.567544" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:20.566749" elapsed="0.000968"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:20.569287" level="INFO">${conn_id} = 455</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:20.568581" elapsed="0.000804"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:20.571620" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:20.571717" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:20.571333" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:20.571939" elapsed="0.000476"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:20.573359" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:20.894036" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:18 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:20.573034" elapsed="0.321179"/>
</kw>
<msg time="2026-04-13T03:01:20.894321" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:20.572674" elapsed="0.321756"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:20.570400" elapsed="0.324414"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:20.896363" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:20.919373" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:20.920095" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:20.920681" 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-04-13T03:01:20.895931" elapsed="0.024976"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:20.922838" elapsed="0.001253"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:20.926275" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:20.925205" elapsed="0.001334"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:20.927716" elapsed="0.000097"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:20.927054" elapsed="0.000889"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:20.926920" elapsed="0.001135"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:20.928439" elapsed="0.000066"/>
</return>
<status status="PASS" start="2026-04-13T03:01:20.928206" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:20.928156" elapsed="0.000484"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:20.928728" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:20.933342" elapsed="0.000429"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:20.933981" elapsed="0.000178"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:20.934343" elapsed="0.000108"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:20.929913" elapsed="0.004657"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:20.560074" elapsed="0.374807"/>
</kw>
<msg time="2026-04-13T03:01:20.935264" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:20.559128" elapsed="0.376204"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:20.558374" elapsed="0.377044"/>
</kw>
<msg time="2026-04-13T03:01:20.935460" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:20.557689" elapsed="0.377852"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:20.938211" 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-04-13T03:01:20.938825" elapsed="0.000152"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:20.939150" elapsed="0.000112"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:20.935856" elapsed="0.003463"/>
</kw>
<msg time="2026-04-13T03:01:20.939416" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:20.556470" elapsed="0.382971"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:20.939973" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:20.939710" elapsed="0.000309"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:20.940068" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:01:20.940231" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:20.554528" elapsed="0.385729"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:20.940304" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:01:20.940449" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:20.552256" elapsed="0.388217"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:20.941047" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:20.940641" elapsed="0.000483">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:20.551110" elapsed="0.390129">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:22.945152" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:22.944244" elapsed="0.000955"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:22.946514" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:22.946125" elapsed="0.000429"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:22.947664" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:22.947825" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:22.947420" elapsed="0.000446"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:22.954067" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:22.953386" elapsed="0.000805"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:22.952966" elapsed="0.001315"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:22.956219" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:22.956674" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:22.955449" elapsed="0.001385"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:22.958316" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:22.957738" elapsed="0.000696"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:22.960080" level="INFO">${conn_id} = 458</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:22.959285" elapsed="0.000900"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:22.962309" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:22.962390" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:22.961985" elapsed="0.000430"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:22.962615" elapsed="0.000365"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:22.964015" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:23.316005" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:00:24 UTC 2026

  System load:  0.24               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:20 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:22.963547" elapsed="0.352621"/>
</kw>
<msg time="2026-04-13T03:01:23.316255" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:22.963193" elapsed="0.353152"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:22.961213" elapsed="0.355445"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:23.317978" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:23.350955" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:23.351306" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:23.351460" 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-04-13T03:01:23.317551" elapsed="0.034006"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:23.352622" elapsed="0.000599"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:23.354204" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:23.353727" elapsed="0.000584"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:23.354739" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:23.354478" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:23.354418" elapsed="0.000456"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:23.355228" elapsed="0.000060"/>
</return>
<status status="PASS" start="2026-04-13T03:01:23.355021" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:23.354972" elapsed="0.000424"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:23.355477" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:23.359809" elapsed="0.000359"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:23.360366" elapsed="0.000173"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:23.360748" elapsed="0.000136"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:23.356618" elapsed="0.004378"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:22.950914" elapsed="0.410306"/>
</kw>
<msg time="2026-04-13T03:01:23.361528" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:22.949844" elapsed="0.411750"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:22.948869" elapsed="0.412992"/>
</kw>
<msg time="2026-04-13T03:01:23.361903" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:22.948087" elapsed="0.413863"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:23.364681" 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-04-13T03:01:23.365180" elapsed="0.000154"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:23.365467" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:23.362303" elapsed="0.003314"/>
</kw>
<msg time="2026-04-13T03:01:23.365777" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:22.946863" elapsed="0.418940"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:23.366232" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:23.365978" elapsed="0.000298"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:23.366321" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T03:01:23.366478" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:22.945534" elapsed="0.420969"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:23.366549" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:01:23.366709" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:22.943255" elapsed="0.423479"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:23.367275" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:23.366873" elapsed="0.000477">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:22.942154" elapsed="0.425309">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:25.370094" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:25.369511" elapsed="0.000635"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:25.371545" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:25.371113" elapsed="0.000475"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:25.372861" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:25.373020" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:25.372586" elapsed="0.000476"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:25.381732" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:25.380994" elapsed="0.000905"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:25.378215" elapsed="0.003787"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:25.383831" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:25.384190" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:25.383162" elapsed="0.001183"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:25.386551" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:25.385472" elapsed="0.001269"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:25.388981" level="INFO">${conn_id} = 461</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:25.387918" elapsed="0.001209"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:25.392253" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:25.392373" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:25.391824" elapsed="0.000588"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:25.392854" elapsed="0.000602"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:25.395276" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:25.991417" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:23 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:25.394758" elapsed="0.596810"/>
</kw>
<msg time="2026-04-13T03:01:25.991671" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:25.394168" elapsed="0.597592"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:25.390666" elapsed="0.601395"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:25.993387" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:26.016357" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:26.017001" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:26.017341" 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-04-13T03:01:25.992972" elapsed="0.024584"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:26.019525" elapsed="0.001051"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:26.023326" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:26.022102" elapsed="0.001557"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:26.024709" elapsed="0.000092"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:26.024077" elapsed="0.000836"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:26.023940" elapsed="0.001101"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:26.025889" elapsed="0.000121"/>
</return>
<status status="PASS" start="2026-04-13T03:01:26.025361" elapsed="0.000758"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:26.025254" elapsed="0.001035"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:26.026470" elapsed="0.000080"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:26.033485" 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-04-13T03:01:26.034085" elapsed="0.000210"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:26.034480" elapsed="0.000110"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:26.029180" elapsed="0.005625"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:25.376080" elapsed="0.658954"/>
</kw>
<msg time="2026-04-13T03:01:26.035346" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:25.374989" elapsed="0.660422"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:25.374111" elapsed="0.661386"/>
</kw>
<msg time="2026-04-13T03:01:26.035539" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:25.373287" elapsed="0.662299"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:26.038303" elapsed="0.000383"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:26.038841" elapsed="0.000154"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:26.039132" elapsed="0.000102"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:26.035891" elapsed="0.003395"/>
</kw>
<msg time="2026-04-13T03:01:26.039484" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:25.371944" elapsed="0.667567"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:26.039974" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:26.039709" elapsed="0.000311"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:26.040065" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:01:26.040225" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:25.370450" elapsed="0.669801"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:26.040298" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:01:26.040445" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:25.368948" elapsed="0.671522"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:26.041062" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:26.040653" elapsed="0.000485">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:25.368159" elapsed="0.673092">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:28.044793" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:28.044213" elapsed="0.000629"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:28.046362" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:28.045860" elapsed="0.000542"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:28.047868" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:28.048063" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:28.047553" elapsed="0.000558"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:28.053411" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:28.052941" elapsed="0.000551"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:28.052882" elapsed="0.000670"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:28.055174" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:28.055486" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:28.054391" elapsed="0.001199"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:28.057086" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:28.056410" elapsed="0.000788"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:28.058762" level="INFO">${conn_id} = 464</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:28.058011" elapsed="0.000852"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:28.061286" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:28.061368" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:28.060981" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:28.061593" elapsed="0.000441"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:28.062983" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:28.405503" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:25 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:28.062606" elapsed="0.343179"/>
</kw>
<msg time="2026-04-13T03:01:28.405872" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:28.062246" elapsed="0.343713"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:28.059970" elapsed="0.346269"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:28.407587" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:28.430370" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:28.431184" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:28.431686" 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-04-13T03:01:28.407141" elapsed="0.024808"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:28.434017" elapsed="0.001094"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:28.437407" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:28.436314" elapsed="0.001394"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:28.438703" elapsed="0.000080"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:28.438105" elapsed="0.000791"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:28.437968" elapsed="0.001063"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:28.440162" elapsed="0.000134"/>
</return>
<status status="PASS" start="2026-04-13T03:01:28.439404" elapsed="0.001029"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:28.439286" elapsed="0.001308"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:28.440826" elapsed="0.000089"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:28.447265" 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-04-13T03:01:28.447998" elapsed="0.000195"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:28.448398" elapsed="0.000111"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:28.443608" elapsed="0.005012"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:28.051031" elapsed="0.397836"/>
</kw>
<msg time="2026-04-13T03:01:28.449180" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:28.050021" elapsed="0.399228"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:28.049176" elapsed="0.400160"/>
</kw>
<msg time="2026-04-13T03:01:28.449377" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:28.048350" elapsed="0.401074"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:28.452209" elapsed="0.000324"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:28.452701" elapsed="0.000151"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:28.452989" 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-04-13T03:01:28.449735" elapsed="0.003404"/>
</kw>
<msg time="2026-04-13T03:01:28.453237" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:28.046742" elapsed="0.406520"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:28.453720" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:28.453448" elapsed="0.000317"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:28.453811" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:01:28.453972" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:28.045143" elapsed="0.408854"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:28.454045" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T03:01:28.454191" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:28.043589" elapsed="0.410626"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:28.454869" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:28.454434" elapsed="0.000515">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:28.042518" elapsed="0.412557">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:30.459391" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:30.458431" elapsed="0.001042"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:30.461747" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:30.461005" elapsed="0.000796"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:30.463395" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:30.463616" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:30.463057" elapsed="0.000648"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:30.470711" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:30.470216" elapsed="0.000586"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:30.470152" elapsed="0.000711"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:30.472458" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:30.472848" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:30.471667" elapsed="0.001325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:30.474804" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:30.474038" elapsed="0.000921"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:30.476667" level="INFO">${conn_id} = 467</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:30.475895" elapsed="0.000873"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:30.479117" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:30.479196" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:30.478819" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:30.479421" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:30.480804" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:30.795965" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:28 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:30.480412" elapsed="0.315708"/>
</kw>
<msg time="2026-04-13T03:01:30.796207" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:30.480053" elapsed="0.316239"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:30.478005" elapsed="0.318567"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:30.797910" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:30.821206" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:30.821786" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:30.822124" 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-04-13T03:01:30.797492" elapsed="0.024847"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:30.824398" elapsed="0.001071"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:30.827538" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:30.826533" elapsed="0.001275"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:30.828686" elapsed="0.000069"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:30.828160" elapsed="0.000726"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:30.828035" elapsed="0.000975"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:30.830049" elapsed="0.000121"/>
</return>
<status status="PASS" start="2026-04-13T03:01:30.829328" elapsed="0.000952"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:30.829221" elapsed="0.001188"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:30.830584" elapsed="0.000117"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:30.836457" elapsed="0.000358"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:30.837015" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:30.837358" elapsed="0.000101"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:30.833144" elapsed="0.004423"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:30.467798" elapsed="0.370009"/>
</kw>
<msg time="2026-04-13T03:01:30.838109" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:30.466303" elapsed="0.371865"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:30.465137" elapsed="0.373114"/>
</kw>
<msg time="2026-04-13T03:01:30.838292" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:30.464005" elapsed="0.374333"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:30.841053" elapsed="0.000310"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:30.841517" elapsed="0.000161"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:30.841811" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:30.838620" elapsed="0.003341"/>
</kw>
<msg time="2026-04-13T03:01:30.842054" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:30.462202" elapsed="0.379878"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:30.842488" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:30.842241" elapsed="0.000291"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:30.842583" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T03:01:30.842765" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:30.459982" elapsed="0.382808"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:30.842837" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:01:30.842981" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:30.457397" elapsed="0.385608"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:30.843535" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:30.843144" elapsed="0.000464">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:30.456042" elapsed="0.387732">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:32.847966" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:32.846865" elapsed="0.001176"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:32.850870" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:32.849999" elapsed="0.000940"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:32.853953" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:32.854381" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:32.853232" elapsed="0.001287"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:32.859511" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:32.858902" elapsed="0.000704"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:32.858825" elapsed="0.000901"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:32.861583" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:32.861909" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:32.860700" elapsed="0.001369"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:32.863782" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:32.862992" elapsed="0.000930"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:32.865597" level="INFO">${conn_id} = 470</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:32.864752" elapsed="0.000964"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:32.868336" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:32.868431" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:32.867900" elapsed="0.000556"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:32.868747" elapsed="0.000487"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:32.870465" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:33.169220" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:30 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:32.870050" elapsed="0.299365"/>
</kw>
<msg time="2026-04-13T03:01:33.169555" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:32.869553" elapsed="0.300155"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:32.866994" elapsed="0.303123"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:33.171922" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:33.194947" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:33.195622" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:33.195934" 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-04-13T03:01:33.171319" elapsed="0.024838"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:33.198292" elapsed="0.001113"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:33.201415" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:33.200340" elapsed="0.001340"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:33.202819" elapsed="0.000048"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:33.202175" elapsed="0.000760"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:33.202002" elapsed="0.001038"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:33.203535" elapsed="0.000078"/>
</return>
<status status="PASS" start="2026-04-13T03:01:33.203267" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:33.203171" elapsed="0.000636"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:33.203943" elapsed="0.000050"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:33.210232" elapsed="0.000769"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:33.211297" elapsed="0.000291"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:33.212056" elapsed="0.000171"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:33.205673" elapsed="0.006784"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:32.857142" elapsed="0.355865"/>
</kw>
<msg time="2026-04-13T03:01:33.213392" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:32.856171" elapsed="0.357310"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:32.855474" elapsed="0.358118"/>
</kw>
<msg time="2026-04-13T03:01:33.213694" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:32.854823" elapsed="0.358935"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:33.217824" 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-04-13T03:01:33.218624" elapsed="0.000270"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:33.219075" elapsed="0.000284"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:33.214308" elapsed="0.005150"/>
</kw>
<msg time="2026-04-13T03:01:33.219613" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:32.851796" elapsed="0.367894"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:33.220291" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:33.219935" elapsed="0.000471"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:33.220467" elapsed="0.000073"/>
</return>
<msg time="2026-04-13T03:01:33.220824" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:32.848844" elapsed="0.372014"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:33.220922" elapsed="0.000064"/>
</return>
<msg time="2026-04-13T03:01:33.221193" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:32.845811" elapsed="0.375415"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:33.222088" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:33.221442" elapsed="0.000776">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:32.844517" elapsed="0.377850">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:35.226484" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:35.225603" elapsed="0.000983"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:35.229861" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:35.228854" elapsed="0.001107"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:35.232266" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:35.232547" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:35.232014" elapsed="0.000576"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:35.238794" elapsed="0.000059"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:35.238051" elapsed="0.000882"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:35.237563" elapsed="0.001459"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:35.240622" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:35.240927" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:35.240112" elapsed="0.000943"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:35.242579" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:35.241949" elapsed="0.000768"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:35.244332" level="INFO">${conn_id} = 473</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:35.243551" elapsed="0.000884"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:35.246740" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:35.246825" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:35.246403" elapsed="0.000447"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:35.247058" elapsed="0.000432"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:35.248445" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:35.622395" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:33 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:35.248104" elapsed="0.374450"/>
</kw>
<msg time="2026-04-13T03:01:35.622663" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:35.247724" elapsed="0.375032"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:35.245570" elapsed="0.377473"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:35.624431" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:35.646972" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:35.647562" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:35.647979" 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-04-13T03:01:35.624026" elapsed="0.024169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:35.650291" elapsed="0.001306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:35.654719" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:35.653230" elapsed="0.001838"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:35.656421" elapsed="0.000100"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:35.655686" elapsed="0.001202"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:35.655462" elapsed="0.001646"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:35.658324" elapsed="0.000176"/>
</return>
<status status="PASS" start="2026-04-13T03:01:35.657597" elapsed="0.001110"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:35.657446" elapsed="0.001478"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:35.659191" elapsed="0.000125"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:35.664568" elapsed="0.000400"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:35.665237" elapsed="0.000173"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:35.665595" 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-04-13T03:01:35.661142" elapsed="0.004689"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:35.235540" elapsed="0.430519"/>
</kw>
<msg time="2026-04-13T03:01:35.666382" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:35.234469" elapsed="0.431976"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:35.233626" elapsed="0.432904"/>
</kw>
<msg time="2026-04-13T03:01:35.666573" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:35.232845" elapsed="0.433778"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:35.669446" elapsed="0.000338"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:35.669937" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:35.670221" elapsed="0.000100"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:35.666926" elapsed="0.003447"/>
</kw>
<msg time="2026-04-13T03:01:35.670467" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:35.230756" elapsed="0.439736"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:35.670928" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:35.670673" elapsed="0.000300"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:35.671016" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:01:35.671171" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:35.227387" elapsed="0.443810"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:35.671244" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:01:35.671428" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:35.224606" elapsed="0.446847"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:35.672023" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:35.671599" elapsed="0.000502">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:35.223301" elapsed="0.448917">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:37.675986" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:37.675015" elapsed="0.001046"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:37.677626" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:37.677246" elapsed="0.000439"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:37.678760" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:37.678910" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:37.678512" elapsed="0.000434"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:37.684586" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:37.683904" elapsed="0.000901"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:37.683485" elapsed="0.001385"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:37.686131" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:37.686389" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:37.685665" elapsed="0.000826"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:37.687897" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:37.687314" elapsed="0.000697"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:37.689548" level="INFO">${conn_id} = 476</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:37.688824" elapsed="0.000841"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:37.691865" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:37.691945" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:37.691558" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:37.692171" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:37.693475" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:38.021439" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:35 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:37.693146" elapsed="0.328573"/>
</kw>
<msg time="2026-04-13T03:01:38.021853" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:37.692795" elapsed="0.329176"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:37.690793" elapsed="0.331575"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:38.024238" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:38.057444" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:38.058112" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:38.058566" 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-04-13T03:01:38.023665" elapsed="0.035186"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:38.061455" elapsed="0.001035"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:38.064813" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:38.063680" elapsed="0.001389"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:38.065900" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:38.065446" elapsed="0.000534"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:38.065312" elapsed="0.000727"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:38.066383" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-04-13T03:01:38.066182" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:38.066134" elapsed="0.000415"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:38.066683" elapsed="0.000061"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:38.071174" elapsed="0.000342"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:38.071732" elapsed="0.000184"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:38.072097" elapsed="0.000101"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:38.067933" elapsed="0.004375"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:37.681550" elapsed="0.390986"/>
</kw>
<msg time="2026-04-13T03:01:38.072962" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:37.680613" elapsed="0.392415"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:37.679851" elapsed="0.393270"/>
</kw>
<msg time="2026-04-13T03:01:38.073165" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:37.679148" elapsed="0.394065"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:38.075919" elapsed="0.000436"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:38.076503" elapsed="0.000190"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:38.076832" elapsed="0.000106"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:38.073494" elapsed="0.003499"/>
</kw>
<msg time="2026-04-13T03:01:38.077087" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:37.677967" elapsed="0.399146"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:38.077529" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:38.077279" elapsed="0.000295"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:38.077616" elapsed="0.000047"/>
</return>
<msg time="2026-04-13T03:01:38.077792" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:37.676588" elapsed="0.401232"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:38.077870" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:01:38.078035" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:37.674113" elapsed="0.403948"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:38.078606" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:38.078203" elapsed="0.000585">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:37.673041" elapsed="0.405872">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:40.082382" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:40.081608" elapsed="0.000840"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:40.084402" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:40.083807" elapsed="0.000653"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:40.086259" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:40.086485" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:40.085929" elapsed="0.000613"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:40.094734" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:40.094200" elapsed="0.000630"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:40.092156" elapsed="0.002735"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:40.096175" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:40.096430" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:40.095686" elapsed="0.000843"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:40.097960" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:40.097318" elapsed="0.000782"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:40.099787" level="INFO">${conn_id} = 479</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:40.098978" elapsed="0.000908"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:40.102047" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:40.102127" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:40.101674" elapsed="0.000477"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:40.102355" elapsed="0.000373"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:40.103615" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:40.432060" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:37 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:40.103288" elapsed="0.328927"/>
</kw>
<msg time="2026-04-13T03:01:40.432300" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:40.102940" elapsed="0.329445"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:40.100895" elapsed="0.331797"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:40.434038" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:40.457117" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:40.457835" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:40.458339" 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-04-13T03:01:40.433561" elapsed="0.025132"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:40.461089" elapsed="0.001435"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:40.464307" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:40.463387" elapsed="0.001092"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:40.465076" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:40.464741" elapsed="0.000447"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:40.464653" elapsed="0.000619"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:40.465880" elapsed="0.000140"/>
</return>
<status status="PASS" start="2026-04-13T03:01:40.465482" elapsed="0.000619"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:40.465412" elapsed="0.000782"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:40.466322" elapsed="0.000059"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:40.512566" elapsed="0.000444"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:40.513229" elapsed="0.000185"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:40.513597" 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-04-13T03:01:40.468304" elapsed="0.045528"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:40.090787" elapsed="0.423316"/>
</kw>
<msg time="2026-04-13T03:01:40.514420" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:40.089261" elapsed="0.425224"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:40.088063" elapsed="0.426503"/>
</kw>
<msg time="2026-04-13T03:01:40.514606" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:40.086953" elapsed="0.427713"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:40.517457" elapsed="0.000352"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:40.517992" elapsed="0.000155"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:40.518286" 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-04-13T03:01:40.515025" elapsed="0.003413"/>
</kw>
<msg time="2026-04-13T03:01:40.518532" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:40.084927" elapsed="0.433630"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:40.519005" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:40.518752" elapsed="0.000298"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:40.519099" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:01:40.519262" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:40.082895" elapsed="0.436392"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:40.519334" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:01:40.519480" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:40.080734" elapsed="0.438771"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:40.520074" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:40.519674" elapsed="0.000475">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:40.079732" elapsed="0.440529">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:42.522538" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:42.522068" elapsed="0.000514"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:42.523809" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:42.523431" elapsed="0.000415"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:42.524929" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:42.525084" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:42.524690" elapsed="0.000430"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:42.530224" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:42.529623" elapsed="0.000703"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:42.529547" elapsed="0.000862"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:42.532008" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:42.532317" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:42.531424" elapsed="0.001015"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:42.534162" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:42.533399" elapsed="0.000903"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:42.536153" level="INFO">${conn_id} = 482</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:42.535265" elapsed="0.001013"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:42.539102" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:42.539203" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:42.538676" elapsed="0.000561"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:42.539492" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:42.541223" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:42.867523" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:40 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:42.540808" elapsed="0.326888"/>
</kw>
<msg time="2026-04-13T03:01:42.867783" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:42.540311" elapsed="0.327563"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:42.537533" elapsed="0.330634"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:42.869458" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:42.892103" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:42.892611" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:42.893000" 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-04-13T03:01:42.869067" elapsed="0.024146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:42.895171" elapsed="0.000931"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:42.898212" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:42.897156" elapsed="0.001356"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:42.899509" elapsed="0.000068"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:42.898964" elapsed="0.000747"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:42.898837" elapsed="0.001002"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:42.900614" elapsed="0.000148"/>
</return>
<status status="PASS" start="2026-04-13T03:01:42.900168" elapsed="0.000703"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:42.900057" elapsed="0.000945"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:42.901181" elapsed="0.000084"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:42.907183" 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-04-13T03:01:42.907740" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:42.908084" elapsed="0.000101"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:42.904064" elapsed="0.004232"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:42.527880" elapsed="0.380638"/>
</kw>
<msg time="2026-04-13T03:01:42.908844" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:42.526622" elapsed="0.382279"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:42.525982" elapsed="0.383001"/>
</kw>
<msg time="2026-04-13T03:01:42.909024" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:42.525314" elapsed="0.383756"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:42.911787" 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-04-13T03:01:42.912252" elapsed="0.000143"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:42.912527" elapsed="0.000111"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:42.909346" elapsed="0.003347"/>
</kw>
<msg time="2026-04-13T03:01:42.912859" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:42.524116" elapsed="0.388770"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:42.913292" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:42.913047" elapsed="0.000289"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:42.913378" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:01:42.913529" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:42.522867" elapsed="0.390687"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:42.913601" elapsed="0.000050"/>
</return>
<msg time="2026-04-13T03:01:42.913777" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:42.521570" elapsed="0.392232"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:42.914331" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:42.913943" elapsed="0.000458">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:42.520903" elapsed="0.393610">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:44.917956" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:44.917175" elapsed="0.000852"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:44.919994" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:44.919364" elapsed="0.000690"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:44.921793" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:44.922017" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:44.921441" elapsed="0.000633"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:44.927792" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:44.927316" elapsed="0.000593"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:44.927255" elapsed="0.000732"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:44.929280" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:44.929531" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:44.928808" elapsed="0.000839"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:44.931019" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:44.930408" elapsed="0.000722"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:44.932719" 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-04-13T03:01:44.931976" elapsed="0.000839"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:44.934920" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:44.934999" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:44.934596" elapsed="0.000427"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:44.935222" elapsed="0.000723"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:44.936900" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:45.259598" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:42 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:44.936551" elapsed="0.323314"/>
</kw>
<msg time="2026-04-13T03:01:45.259953" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:44.936156" elapsed="0.323883"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:44.933833" elapsed="0.326561"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:45.261783" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:45.284609" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:45.285092" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:45.285552" 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-04-13T03:01:45.261350" elapsed="0.024383"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:45.287196" elapsed="0.000759"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:45.289619" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:45.288841" elapsed="0.000988"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:45.290503" elapsed="0.000050"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:45.290112" elapsed="0.000550"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:45.290011" elapsed="0.000753"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:45.291332" elapsed="0.000097"/>
</return>
<status status="PASS" start="2026-04-13T03:01:45.290993" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:45.290917" elapsed="0.000687"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:45.291797" elapsed="0.000061"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:45.297854" 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-04-13T03:01:45.298394" elapsed="0.000171"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:45.298762" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:45.293546" elapsed="0.005430"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:44.925653" elapsed="0.373551"/>
</kw>
<msg time="2026-04-13T03:01:45.299513" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:44.924783" elapsed="0.374791"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:44.923498" elapsed="0.376274"/>
</kw>
<msg time="2026-04-13T03:01:45.299816" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:44.922396" elapsed="0.377469"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:45.302521" elapsed="0.000337"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:45.303009" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:45.303288" 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-04-13T03:01:45.300148" elapsed="0.003288"/>
</kw>
<msg time="2026-04-13T03:01:45.303529" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:44.920533" elapsed="0.383022"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:45.304011" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:45.303758" elapsed="0.000298"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:45.304098" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:01:45.304251" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:44.918457" elapsed="0.385820"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:45.304324" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:01:45.304472" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:44.916356" elapsed="0.388174"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:45.305179" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:45.304776" elapsed="0.000477">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:44.915259" elapsed="0.390109">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:47.308905" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:47.308120" elapsed="0.000855"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:47.311038" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:47.310386" elapsed="0.000712"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:47.312851" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:47.313083" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:47.312477" elapsed="0.000666"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:47.317805" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:47.317308" elapsed="0.000583"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:47.317249" elapsed="0.000705"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:47.319223" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:47.319481" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:47.318752" elapsed="0.000830"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:47.320969" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:47.320391" elapsed="0.000692"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:47.322724" level="INFO">${conn_id} = 488</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:47.321892" elapsed="0.000941"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:47.324904" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:47.324984" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:47.324594" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:47.325209" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:47.326932" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:47.652846" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:45 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:47.326523" elapsed="0.326492"/>
</kw>
<msg time="2026-04-13T03:01:47.653110" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:47.326069" elapsed="0.327138"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:47.323836" elapsed="0.329664"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:47.655061" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:47.678550" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:47.679145" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:47.679484" 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-04-13T03:01:47.654438" elapsed="0.025306"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:47.681667" elapsed="0.001025"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:47.684856" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:47.683810" elapsed="0.001286"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:47.686332" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:47.685474" elapsed="0.000950"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:47.685334" elapsed="0.001150"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:47.686868" elapsed="0.000060"/>
</return>
<status status="PASS" start="2026-04-13T03:01:47.686647" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:47.686582" elapsed="0.000459"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:47.687124" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:47.691536" elapsed="0.000444"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:47.692184" elapsed="0.000171"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:47.692538" 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-04-13T03:01:47.688388" elapsed="0.004385"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:47.315686" elapsed="0.377321"/>
</kw>
<msg time="2026-04-13T03:01:47.693320" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:47.314990" elapsed="0.378392"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:47.314451" elapsed="0.379015"/>
</kw>
<msg time="2026-04-13T03:01:47.693508" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:47.313464" elapsed="0.380093"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:47.696299" 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-04-13T03:01:47.696785" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:47.697064" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:47.693889" elapsed="0.003322"/>
</kw>
<msg time="2026-04-13T03:01:47.697304" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:47.311553" elapsed="0.385777"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:47.697800" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:47.697501" elapsed="0.000348"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:47.697892" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:01:47.698049" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:47.309413" elapsed="0.388662"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:47.698122" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:01:47.698270" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:47.307227" elapsed="0.391068"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:47.698850" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:47.698438" elapsed="0.000486">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:47.306197" elapsed="0.392840">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:49.704297" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:49.703451" elapsed="0.000916"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:49.706405" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:49.705839" elapsed="0.000616"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:49.707835" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:49.708003" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:49.707569" elapsed="0.000489"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:49.713656" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:49.713057" elapsed="0.000703"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:49.712978" elapsed="0.000863"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:49.715523" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:49.715869" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:49.714920" elapsed="0.001092"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:49.717743" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:49.716997" elapsed="0.000893"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:49.720188" level="INFO">${conn_id} = 491</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:49.719114" elapsed="0.001209"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:49.723470" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:49.723589" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:49.723037" elapsed="0.000606"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:49.723923" elapsed="0.000511"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:49.725774" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:50.062801" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:47 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:49.725278" elapsed="0.337688"/>
</kw>
<msg time="2026-04-13T03:01:50.063086" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:49.724755" elapsed="0.338424"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:49.721707" elapsed="0.341764"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:50.064844" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:50.087868" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:50.088334" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:50.088590" 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-04-13T03:01:50.064415" elapsed="0.024362"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:50.090089" elapsed="0.000750"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:50.092569" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:50.091702" elapsed="0.001122"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:50.093540" elapsed="0.000054"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:50.093083" elapsed="0.000634"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:50.092999" elapsed="0.000802"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:50.094329" elapsed="0.000132"/>
</return>
<status status="PASS" start="2026-04-13T03:01:50.094006" elapsed="0.000551"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:50.093937" elapsed="0.000733"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:50.094792" elapsed="0.000054"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:50.101861" elapsed="0.000384"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:50.102460" elapsed="0.000197"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:50.102839" elapsed="0.000107"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:50.097271" elapsed="0.005832"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:49.711035" elapsed="0.392299"/>
</kw>
<msg time="2026-04-13T03:01:50.103691" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:49.709938" elapsed="0.393830"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:49.709136" elapsed="0.394721"/>
</kw>
<msg time="2026-04-13T03:01:50.103899" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:49.708361" elapsed="0.395586"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:50.106789" 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-04-13T03:01:50.107335" elapsed="0.000219"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:50.107781" elapsed="0.000149"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:50.104252" elapsed="0.003756"/>
</kw>
<msg time="2026-04-13T03:01:50.108149" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:49.706960" elapsed="0.401226"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:50.108857" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:50.108447" elapsed="0.000476"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:50.108992" elapsed="0.000051"/>
</return>
<msg time="2026-04-13T03:01:50.109229" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:49.704967" elapsed="0.404299"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:50.109338" elapsed="0.000038"/>
</return>
<msg time="2026-04-13T03:01:50.109556" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:49.702265" elapsed="0.407337"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:50.110485" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:50.109897" elapsed="0.000693">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:49.700796" elapsed="0.409984">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:52.113421" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:52.112850" elapsed="0.000624"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:52.114999" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:52.114450" elapsed="0.000605"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:52.116324" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:52.116612" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:52.116076" elapsed="0.000607"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:52.122297" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:52.121782" elapsed="0.000609"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:52.121432" elapsed="0.001027"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:52.123877" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:52.124157" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:52.123335" elapsed="0.000932"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:52.125783" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:52.125149" elapsed="0.000761"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:52.127537" level="INFO">${conn_id} = 494</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:52.126818" elapsed="0.000864"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:52.129906" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:52.129987" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:52.129535" elapsed="0.000477"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:52.130216" elapsed="0.000368"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:52.131699" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:52.483131" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:50 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:52.131285" elapsed="0.352042"/>
</kw>
<msg time="2026-04-13T03:01:52.483445" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:52.130923" elapsed="0.352641"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:52.128740" elapsed="0.355216"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:52.485583" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:52.508766" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:52.509217" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:52.509441" 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-04-13T03:01:52.485041" elapsed="0.024553"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:52.510869" elapsed="0.000671"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:52.512880" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:52.512252" elapsed="0.000768"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:52.513553" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:52.513222" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:52.513150" 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-04-13T03:01:52.514270" elapsed="0.000062"/>
</return>
<status status="PASS" start="2026-04-13T03:01:52.514027" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:52.513977" elapsed="0.000468"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:52.514531" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:52.519145" elapsed="0.000392"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:52.519886" elapsed="0.000186"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:52.520266" 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-04-13T03:01:52.515905" elapsed="0.004617"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:52.119710" elapsed="0.401068"/>
</kw>
<msg time="2026-04-13T03:01:52.521129" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:52.118597" elapsed="0.402624"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:52.117745" elapsed="0.403579"/>
</kw>
<msg time="2026-04-13T03:01:52.521367" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:52.116928" elapsed="0.404488"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:52.524439" elapsed="0.000351"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:52.524943" elapsed="0.000152"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:52.525230" elapsed="0.000127"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:52.521730" elapsed="0.003682"/>
</kw>
<msg time="2026-04-13T03:01:52.525509" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:52.115384" elapsed="0.410151"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:52.526047" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:52.525757" elapsed="0.000347"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:52.526163" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T03:01:52.526346" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:52.113787" elapsed="0.412585"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:52.526419" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:01:52.526566" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:52.112252" elapsed="0.414338"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:52.527152" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:52.526753" elapsed="0.000474">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:52.111400" elapsed="0.415941">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:54.530915" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:54.530043" elapsed="0.000944"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:54.533077" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:54.532354" elapsed="0.000785"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:54.535059" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:54.535296" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:54.534694" elapsed="0.000661"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:54.541302" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:54.540847" elapsed="0.000602"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:54.540520" elapsed="0.000991"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:54.542787" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:54.543032" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:54.542328" elapsed="0.000803"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:54.544449" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:54.543906" elapsed="0.000653"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:54.546088" level="INFO">${conn_id} = 497</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:54.545353" elapsed="0.000834"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:54.548267" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:54.548346" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:54.547979" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:54.548566" elapsed="0.000450"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:54.549949" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:54.877024" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:52 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:54.549575" elapsed="0.327610"/>
</kw>
<msg time="2026-04-13T03:01:54.877272" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:54.549223" elapsed="0.328135"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:54.547217" elapsed="0.330452"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:54.878933" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:54.901855" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:54.902157" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:54.902311" 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-04-13T03:01:54.878529" elapsed="0.023881"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:54.903335" elapsed="0.000771"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:54.906329" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:54.905254" elapsed="0.001313"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:54.907535" elapsed="0.000069"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:54.906949" elapsed="0.000882"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:54.906827" elapsed="0.001132"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:54.908752" elapsed="0.000118"/>
</return>
<status status="PASS" start="2026-04-13T03:01:54.908276" elapsed="0.000699"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:54.908170" elapsed="0.000934"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:54.909278" elapsed="0.000081"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:54.918232" 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-04-13T03:01:54.919014" elapsed="0.000229"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:54.919493" elapsed="0.000287"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:54.911861" elapsed="0.008074"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:54.539195" elapsed="0.381053"/>
</kw>
<msg time="2026-04-13T03:01:54.920769" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:54.538256" elapsed="0.382596"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:54.536994" elapsed="0.383971"/>
</kw>
<msg time="2026-04-13T03:01:54.921023" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:54.535716" elapsed="0.385370"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:54.924468" elapsed="0.000334"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:54.924953" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:54.925237" 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-04-13T03:01:54.921477" elapsed="0.003909"/>
</kw>
<msg time="2026-04-13T03:01:54.925481" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:54.533607" elapsed="0.391900"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:54.925949" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:54.925697" elapsed="0.000297"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:54.926038" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:01:54.926189" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:54.531421" elapsed="0.394794"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:54.926260" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:01:54.926401" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:54.529204" elapsed="0.397222"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:54.927038" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:54.926570" elapsed="0.000543">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:54.528118" elapsed="0.399104">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:56.931133" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:56.930301" elapsed="0.000904"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:56.933128" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:56.932734" elapsed="0.000441"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:56.934328" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:56.934477" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:56.934097" elapsed="0.000418"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:56.941737" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:56.941027" elapsed="0.000827"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:56.940926" elapsed="0.001015"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:56.943997" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:56.944255" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:56.943061" elapsed="0.001308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:56.945940" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:56.945339" elapsed="0.000734"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:56.948040" level="INFO">${conn_id} = 500</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:56.947099" elapsed="0.001078"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:56.950429" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:56.950515" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:56.950134" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:56.950769" elapsed="0.000363"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:56.952281" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:57.280866" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:54 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:56.951923" elapsed="0.329095"/>
</kw>
<msg time="2026-04-13T03:01:57.281105" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:56.951364" elapsed="0.329829"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:56.949298" elapsed="0.332188"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:57.282805" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:57.295807" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:57.296193" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:57.296420" 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-04-13T03:01:57.282392" elapsed="0.014164"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:57.298462" elapsed="0.001041"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:57.301929" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:57.300694" elapsed="0.001481"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:57.303130" elapsed="0.000068"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:57.302571" elapsed="0.000729"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:57.302442" elapsed="0.000983"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:57.304234" elapsed="0.000120"/>
</return>
<status status="PASS" start="2026-04-13T03:01:57.303782" elapsed="0.000680"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:57.303668" elapsed="0.000924"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:57.304809" elapsed="0.000085"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:57.311038" elapsed="0.000457"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:57.311726" elapsed="0.000344"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:57.312264" elapsed="0.000112"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:57.307514" elapsed="0.004977"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:56.938186" elapsed="0.374556"/>
</kw>
<msg time="2026-04-13T03:01:57.313056" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:56.936855" elapsed="0.376271"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:56.935832" elapsed="0.377380"/>
</kw>
<msg time="2026-04-13T03:01:57.313253" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:56.934795" elapsed="0.378504"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:57.316444" elapsed="0.000335"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:57.316931" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:57.317215" 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-04-13T03:01:57.313696" elapsed="0.003668"/>
</kw>
<msg time="2026-04-13T03:01:57.317460" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:56.933506" elapsed="0.383980"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:57.317946" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:57.317690" elapsed="0.000300"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:57.318037" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T03:01:57.318195" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:56.931748" elapsed="0.386472"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:57.318267" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T03:01:57.318411" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:56.929278" elapsed="0.389158"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:57.319050" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:57.318609" elapsed="0.000517">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:56.928087" elapsed="0.391154">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:01:59.322097" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:01:59.321347" elapsed="0.000808"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:01:59.323687" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:01:59.323199" elapsed="0.000542"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:59.325142" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:59.325325" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:59.324868" elapsed="0.000504"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:01:59.331377" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:01:59.330739" elapsed="0.000761"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:59.330654" elapsed="0.000930"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:59.333935" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:01:59.334384" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:01:59.332811" elapsed="0.001745"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:59.336726" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:59.335785" elapsed="0.001069"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:01:59.338565" level="INFO">${conn_id} = 503</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:59.337814" elapsed="0.000867"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:01:59.340862" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:01:59.340945" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:01:59.340525" elapsed="0.000452"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:59.341192" elapsed="0.000638"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:01:59.342760" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:01:59.652459" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:57 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:01:59.342406" elapsed="0.310218"/>
</kw>
<msg time="2026-04-13T03:01:59.652749" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:59.342045" elapsed="0.310802"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:01:59.339713" elapsed="0.313443"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:01:59.654522" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:01:59.677528" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:01:59.678132" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:01:59.678474" 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-04-13T03:01:59.654119" elapsed="0.024608"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:59.680593" elapsed="0.000993"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:59.683800" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:59.682740" elapsed="0.001327"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:59.685054" elapsed="0.000072"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:01:59.684438" elapsed="0.000794"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:59.684310" elapsed="0.001051"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:01:59.686044" elapsed="0.000081"/>
</return>
<status status="PASS" start="2026-04-13T03:01:59.685712" elapsed="0.000483"/>
</branch>
<status status="PASS" start="2026-04-13T03:01:59.685574" elapsed="0.000708"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:01:59.686395" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:59.692576" 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-04-13T03:01:59.693376" elapsed="0.000231"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:59.693897" elapsed="0.000156"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:59.688234" elapsed="0.005979"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:01:59.328727" elapsed="0.365805"/>
</kw>
<msg time="2026-04-13T03:01:59.694988" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:59.327440" elapsed="0.367633"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:01:59.326473" elapsed="0.368719"/>
</kw>
<msg time="2026-04-13T03:01:59.695251" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:59.325621" elapsed="0.369697"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:01:59.698829" elapsed="0.000323"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:01:59.699305" elapsed="0.000154"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:01:59.699610" elapsed="0.000137"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:01:59.695851" elapsed="0.003950"/>
</kw>
<msg time="2026-04-13T03:01:59.699961" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:01:59.324103" elapsed="0.375885"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:01:59.700419" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:01:59.700160" elapsed="0.000305"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:01:59.700509" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:01:59.700683" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:01:59.322496" elapsed="0.378214"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:01:59.700782" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:01:59.700937" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:01:59.320731" elapsed="0.380232"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:01:59.701510" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:01:59.701108" elapsed="0.000493">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:01:59.319884" elapsed="0.381853">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:01.705228" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:01.704318" elapsed="0.000983"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:01.707015" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:01.706583" elapsed="0.000472"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:01.708208" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:01.708361" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:01.707980" elapsed="0.000422"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:01.713873" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:01.713218" elapsed="0.000771"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:01.713134" elapsed="0.000939"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:01.716207" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:01.716568" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:01.715214" elapsed="0.001522"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:01.718779" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:01.717938" elapsed="0.001002"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:01.721170" level="INFO">${conn_id} = 506</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:01.720097" elapsed="0.001221"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:01.724814" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:01.724931" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:01.724350" elapsed="0.000618"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:01.725259" elapsed="0.000660"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:01.726818" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:02.092497" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:01:59 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:01.726475" elapsed="0.366428"/>
</kw>
<msg time="2026-04-13T03:02:02.092993" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:01.726125" elapsed="0.366954"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:01.723234" elapsed="0.370125"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:02.094758" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:02.117606" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:02.118283" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:02.118687" 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-04-13T03:02:02.094344" elapsed="0.024580"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:02.120882" elapsed="0.001033"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:02.123648" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:02.123013" elapsed="0.000786"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:02.124356" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:02.124029" elapsed="0.000435"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:02.123948" elapsed="0.000594"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:02.125045" elapsed="0.000075"/>
</return>
<status status="PASS" start="2026-04-13T03:02:02.124766" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:02.124698" elapsed="0.000575"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:02.125385" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:02.131471" 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-04-13T03:02:02.132230" elapsed="0.000225"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:02.132725" 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-04-13T03:02:02.126991" elapsed="0.006036"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:01.711157" elapsed="0.422179"/>
</kw>
<msg time="2026-04-13T03:02:02.133798" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:01.710175" elapsed="0.423708"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:01.709387" elapsed="0.424616"/>
</kw>
<msg time="2026-04-13T03:02:02.134100" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:01.708619" elapsed="0.425686"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:02.137321" elapsed="0.000338"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:02.137811" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:02.138117" 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-04-13T03:02:02.134798" elapsed="0.003469"/>
</kw>
<msg time="2026-04-13T03:02:02.138359" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:01.707360" elapsed="0.431025"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:02.138885" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:02.138545" elapsed="0.000386"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:02.138973" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:02:02.139128" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:01.705841" elapsed="0.433313"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:02.139201" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:02:02.139348" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:01.703507" elapsed="0.435867"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:02.139996" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:02.139572" elapsed="0.000500">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:01.702479" elapsed="0.437708">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:04.143715" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:04.142928" elapsed="0.000860"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:04.145937" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:04.145244" elapsed="0.000759"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:04.147911" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:04.148161" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:04.147519" elapsed="0.000707"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:04.154530" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:04.153794" elapsed="0.000822"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:04.153736" elapsed="0.000959"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:04.155962" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:04.156241" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:04.155478" elapsed="0.000864"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:04.157724" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:04.157130" elapsed="0.000704"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:04.159374" level="INFO">${conn_id} = 509</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:04.158599" elapsed="0.000874"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:04.162272" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:04.162418" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:04.161845" elapsed="0.000613"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:04.162805" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:04.164676" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:04.488235" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:02 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:04.164175" elapsed="0.324218"/>
</kw>
<msg time="2026-04-13T03:02:04.488480" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:04.163674" elapsed="0.324893"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:04.160695" elapsed="0.328193"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:04.490226" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:04.513484" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:04.514203" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:04.514575" 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-04-13T03:02:04.489820" elapsed="0.025032"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:04.516907" elapsed="0.001139"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:04.519379" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:04.518738" elapsed="0.000788"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:04.520174" elapsed="0.000062"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:04.519779" elapsed="0.000529"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:04.519695" elapsed="0.000694"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:04.521006" elapsed="0.000108"/>
</return>
<status status="PASS" start="2026-04-13T03:02:04.520596" elapsed="0.000635"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:04.520527" elapsed="0.000794"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:04.521439" elapsed="0.000056"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:04.528154" elapsed="0.000583"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:04.529078" elapsed="0.000373"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:04.529756" elapsed="0.000159"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:04.523334" elapsed="0.006717"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:04.152391" elapsed="0.377889"/>
</kw>
<msg time="2026-04-13T03:02:04.530597" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:04.151313" elapsed="0.379493"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:04.149879" elapsed="0.381016"/>
</kw>
<msg time="2026-04-13T03:02:04.530937" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:04.148576" elapsed="0.382408"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:04.534105" elapsed="0.000457"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:04.534788" elapsed="0.000175"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:04.535100" elapsed="0.000102"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:04.531402" elapsed="0.003853"/>
</kw>
<msg time="2026-04-13T03:02:04.535356" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:04.146500" elapsed="0.388883"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:04.535861" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:04.535570" elapsed="0.000347"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:04.535972" elapsed="0.000047"/>
</return>
<msg time="2026-04-13T03:02:04.536171" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:04.144243" elapsed="0.391955"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:04.536247" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:02:04.536397" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:04.142053" elapsed="0.394369"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:04.537000" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:04.536565" elapsed="0.000562">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:04.140991" elapsed="0.396259">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:06.541281" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:06.540521" elapsed="0.000862"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:06.543507" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:06.542949" elapsed="0.000622"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:06.545203" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:06.545383" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:06.544872" elapsed="0.000552"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:06.551042" elapsed="0.000059"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:06.550371" elapsed="0.000801"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:06.549927" elapsed="0.001337"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:06.553045" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:06.553454" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:06.552347" elapsed="0.001250"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:06.555623" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:06.554737" elapsed="0.001073"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:06.557780" level="INFO">${conn_id} = 512</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:06.556883" elapsed="0.001026"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:06.561146" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:06.561329" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:06.560446" elapsed="0.000923"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:06.561695" elapsed="0.000530"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:06.563579" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:06.877038" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:04 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:06.563072" elapsed="0.314133"/>
</kw>
<msg time="2026-04-13T03:02:06.877296" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:06.562524" elapsed="0.314865"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:06.559289" elapsed="0.318415"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:06.878996" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:06.901691" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:06.902200" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:06.902538" 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-04-13T03:02:06.878574" elapsed="0.024251"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:06.904649" elapsed="0.000879"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:06.907590" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:06.906598" elapsed="0.001263"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:06.908969" elapsed="0.000075"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:06.908251" elapsed="0.000901"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:06.908117" elapsed="0.001167"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:06.910112" elapsed="0.000116"/>
</return>
<status status="PASS" start="2026-04-13T03:02:06.909612" elapsed="0.000735"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:06.909501" elapsed="0.000981"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:06.910797" elapsed="0.000090"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:06.916356" elapsed="0.000359"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:06.916918" elapsed="0.000168"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:06.917295" elapsed="0.000109"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:06.913236" elapsed="0.004282"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:06.547975" elapsed="0.369791"/>
</kw>
<msg time="2026-04-13T03:02:06.918075" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:06.546977" elapsed="0.371158"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:06.546353" elapsed="0.371867"/>
</kw>
<msg time="2026-04-13T03:02:06.918262" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:06.545660" elapsed="0.372650"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:06.920996" 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-04-13T03:02:06.921462" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:06.921761" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:06.918594" elapsed="0.003317"/>
</kw>
<msg time="2026-04-13T03:02:06.922006" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:06.544013" elapsed="0.378026"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:06.922533" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:06.922252" elapsed="0.000327"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:06.922622" elapsed="0.000118"/>
</return>
<msg time="2026-04-13T03:02:06.922871" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:06.541962" elapsed="0.380934"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:06.922944" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:02:06.923094" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:06.539796" elapsed="0.383323"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:06.923815" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:06.923260" elapsed="0.000629">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:06.538761" elapsed="0.385250">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:08.927802" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:08.927007" elapsed="0.000865"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:08.929910" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:08.929274" elapsed="0.000696"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:08.931686" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:08.931949" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:08.931427" elapsed="0.000560"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:08.937650" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:08.936952" elapsed="0.000817"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:08.936548" elapsed="0.001303"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:08.939694" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:08.940031" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:08.939034" elapsed="0.001135"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:08.942019" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:08.941241" elapsed="0.000931"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:08.944393" level="INFO">${conn_id} = 515</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:08.943311" elapsed="0.001217"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:08.947420" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:08.947528" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:08.947021" elapsed="0.000539"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:08.948049" elapsed="0.000486"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:08.949804" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:09.272527" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:06 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:08.949330" elapsed="0.323367"/>
</kw>
<msg time="2026-04-13T03:02:09.272783" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:08.948844" elapsed="0.324028"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:08.945948" elapsed="0.327204"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:09.274419" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:09.296787" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:09.297406" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:09.297811" 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-04-13T03:02:09.274039" elapsed="0.024045"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:09.299938" elapsed="0.000957"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:09.303011" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:09.302186" elapsed="0.000978"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:09.303851" elapsed="0.000049"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:09.303415" elapsed="0.000561"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:09.303319" elapsed="0.000776"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:09.304810" elapsed="0.000123"/>
</return>
<status status="PASS" start="2026-04-13T03:02:09.304379" elapsed="0.000660"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:09.304287" elapsed="0.000870"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:09.305307" elapsed="0.000073"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:09.315203" elapsed="0.000442"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:09.315931" elapsed="0.000189"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:09.316300" elapsed="0.000108"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:09.307618" elapsed="0.008899"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:08.934706" elapsed="0.382053"/>
</kw>
<msg time="2026-04-13T03:02:09.317071" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:08.933732" elapsed="0.383410"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:08.932970" elapsed="0.384261"/>
</kw>
<msg time="2026-04-13T03:02:09.317272" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:08.932198" elapsed="0.385120"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:09.320093" elapsed="0.000331"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:09.320578" elapsed="0.000168"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:09.320884" elapsed="0.000102"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:09.317618" elapsed="0.003421"/>
</kw>
<msg time="2026-04-13T03:02:09.321136" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:08.930469" elapsed="0.390693"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:09.321603" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:09.321343" elapsed="0.000323"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:09.321715" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:02:09.321924" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:08.928347" elapsed="0.393607"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:09.322005" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:02:09.322172" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:08.926163" elapsed="0.396035"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:09.322786" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:09.322341" elapsed="0.000540">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:08.925119" elapsed="0.397889">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:11.326970" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:11.325932" elapsed="0.001116"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:11.328468" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:11.328040" elapsed="0.000468"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:11.329705" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:11.329855" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:11.329455" elapsed="0.000440"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:11.335497" elapsed="0.000068"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:11.334754" elapsed="0.001028"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:11.334662" elapsed="0.001236"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:11.338375" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:11.338802" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:11.337242" elapsed="0.001706"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:11.340522" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:11.339899" elapsed="0.000757"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:11.342356" level="INFO">${conn_id} = 518</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:11.341466" elapsed="0.000990"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:11.344728" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:11.344817" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:11.344389" elapsed="0.000454"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:11.345047" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:11.346571" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:11.719453" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:09 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:11.346198" elapsed="0.373454"/>
</kw>
<msg time="2026-04-13T03:02:11.719749" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:11.345796" elapsed="0.374046"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:11.343501" elapsed="0.376635"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:11.721674" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:11.745273" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:11.746034" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:11.746407" 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-04-13T03:02:11.721142" elapsed="0.025547"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:11.748874" elapsed="0.001095"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:11.752466" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:11.751258" elapsed="0.001573"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:11.753929" elapsed="0.000074"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:11.753262" elapsed="0.000850"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:11.753114" elapsed="0.001129"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:11.754691" elapsed="0.000064"/>
</return>
<status status="PASS" start="2026-04-13T03:02:11.754437" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:11.754385" elapsed="0.000482"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:11.754950" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:11.759806" elapsed="0.000540"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:11.760670" elapsed="0.000249"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:11.761173" 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-04-13T03:02:11.756211" elapsed="0.005250"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:11.332694" elapsed="0.429109"/>
</kw>
<msg time="2026-04-13T03:02:11.762280" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:11.331683" elapsed="0.430683"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:11.330932" elapsed="0.431547"/>
</kw>
<msg time="2026-04-13T03:02:11.762534" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:11.330103" elapsed="0.432492"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:11.766198" 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-04-13T03:02:11.766762" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:11.767068" elapsed="0.000102"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:11.763027" elapsed="0.004197"/>
</kw>
<msg time="2026-04-13T03:02:11.767323" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:11.328822" elapsed="0.438527"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:11.767940" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:11.767573" elapsed="0.000415"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:11.768049" elapsed="0.000044"/>
</return>
<msg time="2026-04-13T03:02:11.768234" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:11.327444" elapsed="0.440816"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:11.768310" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:02:11.768460" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:11.324983" elapsed="0.443502"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:11.769056" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:11.768646" elapsed="0.000485">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:11.323875" elapsed="0.445375">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:13.772723" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:13.771944" elapsed="0.000852"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:13.774989" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:13.774334" elapsed="0.000718"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:13.776833" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:13.777069" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:13.776462" elapsed="0.000666"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:13.782811" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:13.782325" elapsed="0.000570"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:13.782266" elapsed="0.000694"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:13.784490" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:13.784756" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:13.783787" elapsed="0.001069"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:13.786199" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:13.785617" elapsed="0.000691"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:13.788004" 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-04-13T03:02:13.787209" elapsed="0.000895"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:13.790176" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:13.790256" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:13.789884" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:13.790481" elapsed="0.000531"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:13.792005" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:14.155315" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:11 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:13.791663" elapsed="0.363962"/>
</kw>
<msg time="2026-04-13T03:02:14.155769" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:13.791222" elapsed="0.364676"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:13.789109" elapsed="0.367232"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:14.158054" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:14.181153" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:14.181465" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:14.181670" 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-04-13T03:02:14.157501" elapsed="0.024286"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:14.182724" elapsed="0.000541"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:14.184796" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:14.184079" elapsed="0.000916"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:14.185718" elapsed="0.000048"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:14.185305" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:14.185198" elapsed="0.000722"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:14.186424" elapsed="0.000075"/>
</return>
<status status="PASS" start="2026-04-13T03:02:14.186126" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:14.186057" elapsed="0.000652"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:14.186867" elapsed="0.000071"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:14.192655" elapsed="0.000351"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:14.193211" elapsed="0.000174"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:14.193570" 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-04-13T03:02:14.188545" elapsed="0.005262"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:13.780907" elapsed="0.413129"/>
</kw>
<msg time="2026-04-13T03:02:14.194348" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:13.779902" elapsed="0.414508"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:13.778577" elapsed="0.415922"/>
</kw>
<msg time="2026-04-13T03:02:14.194542" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:13.777453" elapsed="0.417137"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:14.197517" elapsed="0.000345"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:14.198015" elapsed="0.000152"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:14.198304" 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-04-13T03:02:14.195063" elapsed="0.003392"/>
</kw>
<msg time="2026-04-13T03:02:14.198551" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:13.775536" elapsed="0.423040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:14.199061" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:14.198787" elapsed="0.000319"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:14.199150" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:02:14.199315" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:13.773232" elapsed="0.426118"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:14.199408" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:02:14.199564" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:13.771076" elapsed="0.428513"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:14.200177" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:14.199771" elapsed="0.000483">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:13.770039" elapsed="0.430332">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:16.203987" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:16.203200" elapsed="0.000858"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:16.206119" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:16.205427" elapsed="0.000754"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:16.207938" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:16.208171" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:16.207571" elapsed="0.000659"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:16.213239" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:16.212794" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:16.212734" elapsed="0.000645"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:16.214886" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:16.215134" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:16.214178" elapsed="0.001056"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:16.216566" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:16.216020" elapsed="0.000682"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:16.218198" level="INFO">${conn_id} = 524</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:16.217462" elapsed="0.000833"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:16.220349" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:16.220428" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:16.220064" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:16.220690" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:16.222072" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:16.531060" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:14 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:16.221738" elapsed="0.309479"/>
</kw>
<msg time="2026-04-13T03:02:16.531303" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:16.221305" elapsed="0.310090"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:16.219297" elapsed="0.312403"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:16.533029" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:16.556074" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:16.556770" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:16.557138" 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-04-13T03:02:16.532598" elapsed="0.024823"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:16.559522" elapsed="0.001145"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:16.563317" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:16.562276" elapsed="0.001309"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:16.564502" elapsed="0.000072"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:16.563993" elapsed="0.000718"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:16.563863" elapsed="0.000980"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:16.565701" elapsed="0.000129"/>
</return>
<status status="PASS" start="2026-04-13T03:02:16.565174" elapsed="0.000767"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:16.565064" elapsed="0.001010"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:16.566256" elapsed="0.000088"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:16.573159" elapsed="0.000422"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:16.573805" elapsed="0.000182"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:16.574173" 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-04-13T03:02:16.569065" elapsed="0.005355"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:16.211397" elapsed="0.363352"/>
</kw>
<msg time="2026-04-13T03:02:16.575072" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:16.210710" elapsed="0.364431"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:16.209740" elapsed="0.365489"/>
</kw>
<msg time="2026-04-13T03:02:16.575272" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:16.208553" elapsed="0.366767"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:16.578438" elapsed="0.000455"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:16.579058" elapsed="0.000176"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:16.579379" elapsed="0.000106"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:16.575814" elapsed="0.003725"/>
</kw>
<msg time="2026-04-13T03:02:16.579879" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:16.206671" elapsed="0.373237"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:16.580404" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:16.580137" elapsed="0.000314"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:16.580499" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T03:02:16.580683" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:16.204494" elapsed="0.376215"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:16.580759" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:02:16.580909" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:16.202335" elapsed="0.378598"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:16.581540" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:16.581089" elapsed="0.000553">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:16.201213" elapsed="0.380549">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:18.585186" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:18.584360" elapsed="0.000897"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:18.587288" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:18.586674" elapsed="0.000675"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:18.589184" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:18.589419" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:18.588851" elapsed="0.000629"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:18.595666" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:18.594453" elapsed="0.001335"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:18.594369" elapsed="0.001507"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:18.597918" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:18.598283" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:18.597156" elapsed="0.001274"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:18.600564" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:18.599613" elapsed="0.001254"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:18.602725" level="INFO">${conn_id} = 527</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:18.601993" elapsed="0.000832"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:18.604961" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:18.605041" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:18.604619" elapsed="0.000446"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:18.605269" elapsed="0.000511"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:18.606697" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:18.926198" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:16 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:18.606348" elapsed="0.320098"/>
</kw>
<msg time="2026-04-13T03:02:18.926533" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:18.605992" elapsed="0.320627"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:18.603834" elapsed="0.323086"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:18.928204" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:18.951033" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:18.951709" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:18.952055" 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-04-13T03:02:18.927810" elapsed="0.024460"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:18.954218" elapsed="0.000981"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:18.957651" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:18.956370" elapsed="0.001435"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:18.958399" elapsed="0.000048"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:18.958062" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:18.957977" elapsed="0.000622"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:18.959115" elapsed="0.000082"/>
</return>
<status status="PASS" start="2026-04-13T03:02:18.958827" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:18.958759" elapsed="0.000594"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:18.959468" elapsed="0.000053"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:18.966208" elapsed="0.000670"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:18.967275" elapsed="0.000341"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:18.967994" 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-04-13T03:02:18.961153" elapsed="0.007215"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:18.592365" elapsed="0.376867"/>
</kw>
<msg time="2026-04-13T03:02:18.969874" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:18.591339" elapsed="0.378635"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:18.590526" elapsed="0.379566"/>
</kw>
<msg time="2026-04-13T03:02:18.970147" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:18.589787" elapsed="0.380424"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:18.973708" 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-04-13T03:02:18.974323" elapsed="0.000196"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:18.974703" 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-04-13T03:02:18.970600" elapsed="0.004291"/>
</kw>
<msg time="2026-04-13T03:02:18.975007" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:18.587844" elapsed="0.387194"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:18.975567" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:18.975263" elapsed="0.000358"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:18.975695" elapsed="0.000044"/>
</return>
<msg time="2026-04-13T03:02:18.975895" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:18.585725" elapsed="0.390200"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:18.975983" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:02:18.976158" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:18.583520" elapsed="0.392667"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:18.977078" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:18.976472" elapsed="0.000697">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:18.582484" elapsed="0.394824">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:20.981082" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:20.980303" elapsed="0.000831"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:20.982501" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:20.982078" elapsed="0.000468"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:20.983721" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:20.983869" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:20.983462" elapsed="0.000444"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:20.989577" elapsed="0.000072"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:20.988944" elapsed="0.000778"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:20.988513" elapsed="0.001298"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:20.991515" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:20.991932" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:20.990897" elapsed="0.001187"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:20.993739" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:20.993148" elapsed="0.000709"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:20.995431" level="INFO">${conn_id} = 530</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:20.994698" elapsed="0.000841"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:20.997891" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:20.997973" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:20.997527" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:20.998200" elapsed="0.000357"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:20.999567" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:21.316667" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:18 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:20.999201" elapsed="0.317644"/>
</kw>
<msg time="2026-04-13T03:02:21.316948" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:20.998800" elapsed="0.318243"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:20.996766" elapsed="0.320582"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:21.318861" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:21.342529" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:21.343241" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:21.343714" 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-04-13T03:02:21.318357" elapsed="0.025662"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:21.346363" elapsed="0.001099"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:21.349812" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:21.348709" elapsed="0.001346"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:21.351145" elapsed="0.000100"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:21.350428" elapsed="0.000962"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:21.350291" elapsed="0.001269"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:21.352814" elapsed="0.000075"/>
</return>
<status status="PASS" start="2026-04-13T03:02:21.352202" elapsed="0.000744"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:21.352060" elapsed="0.000947"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:21.353092" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:21.357936" 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-04-13T03:02:21.358661" elapsed="0.000191"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:21.359037" elapsed="0.000107"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:21.354354" elapsed="0.004902"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:20.986620" elapsed="0.372921"/>
</kw>
<msg time="2026-04-13T03:02:21.359955" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:20.985591" elapsed="0.374443"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:20.984848" elapsed="0.375282"/>
</kw>
<msg time="2026-04-13T03:02:21.360172" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:20.984112" elapsed="0.376108"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:21.363368" elapsed="0.000571"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:21.364128" elapsed="0.000178"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:21.364483" elapsed="0.000112"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:21.360603" elapsed="0.004081"/>
</kw>
<msg time="2026-04-13T03:02:21.364795" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:20.982889" elapsed="0.381932"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:21.365276" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:21.365012" elapsed="0.000327"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:21.365404" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T03:02:21.365583" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:20.981437" elapsed="0.384172"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:21.365677" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:02:21.365828" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:20.979260" elapsed="0.386592"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:21.366566" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:21.366020" elapsed="0.000646">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:20.978114" elapsed="0.388672">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:23.370783" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:23.369852" elapsed="0.001014"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:23.373277" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:23.372542" elapsed="0.000799"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:23.374713" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:23.374867" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:23.374458" elapsed="0.000452"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:23.380881" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:23.380216" elapsed="0.000809"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:23.379735" elapsed="0.001395"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:23.382674" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:23.382929" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:23.382185" elapsed="0.000850"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:23.384460" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:23.383858" elapsed="0.000714"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:23.386130" 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-04-13T03:02:23.385362" elapsed="0.000868"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:23.388481" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:23.388560" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:23.388172" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:23.388851" elapsed="0.000373"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:23.390240" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:23.708103" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:01:25 UTC 2026

  System load:  0.18               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:21 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:23.389875" elapsed="0.318396"/>
</kw>
<msg time="2026-04-13T03:02:23.708364" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:23.389437" elapsed="0.319024"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:23.387292" elapsed="0.321515"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:23.710171" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:23.732979" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:23.733581" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:23.734074" 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-04-13T03:02:23.709747" elapsed="0.024545"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:23.736195" elapsed="0.001030"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:23.739319" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:23.738432" 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-04-13T03:02:23.740181" elapsed="0.000047"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:23.739736" elapsed="0.000560"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:23.739650" elapsed="0.000730"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:23.740900" elapsed="0.000082"/>
</return>
<status status="PASS" start="2026-04-13T03:02:23.740586" elapsed="0.000466"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:23.740516" elapsed="0.000617"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:23.741245" elapsed="0.000053"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:23.749143" elapsed="0.000353"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:23.749820" elapsed="0.000185"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:23.750190" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:23.742961" elapsed="0.007441"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:23.377803" elapsed="0.372823"/>
</kw>
<msg time="2026-04-13T03:02:23.750956" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:23.376760" elapsed="0.374262"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:23.375956" elapsed="0.375149"/>
</kw>
<msg time="2026-04-13T03:02:23.751146" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:23.375140" elapsed="0.376052"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:23.753899" elapsed="0.000333"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:23.754384" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:23.754710" 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-04-13T03:02:23.751472" elapsed="0.003400"/>
</kw>
<msg time="2026-04-13T03:02:23.754964" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:23.373884" elapsed="0.381105"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:23.755442" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:23.755182" elapsed="0.000305"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:23.755532" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:02:23.755705" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:23.371531" elapsed="0.384200"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:23.755777" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:02:23.755922" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:23.368916" elapsed="0.387030"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:23.756495" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:23.756098" elapsed="0.000470">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:23.367579" elapsed="0.389139">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:25.760338" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:25.759459" elapsed="0.000972"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:25.762500" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:25.761860" elapsed="0.000701"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:25.764270" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:25.764570" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:25.764019" elapsed="0.000600"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:25.769973" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:25.769337" elapsed="0.000749"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:25.769257" elapsed="0.000911"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:25.772219" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:25.772470" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:25.771359" elapsed="0.001211"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:25.773982" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:25.773397" elapsed="0.000903"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:25.775880" level="INFO">${conn_id} = 536</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:25.775155" elapsed="0.000823"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:25.778120" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:25.778201" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:25.777819" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:25.778428" elapsed="0.000362"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:25.779728" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:26.384992" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:25 UTC 2026

  System load:  0.27               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:23 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:25.779387" elapsed="0.605910"/>
</kw>
<msg time="2026-04-13T03:02:26.385488" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:25.779036" elapsed="0.606653"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:25.777062" elapsed="0.609198"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:26.388580" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:26.411599" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:26.412333" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:26.412715" 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-04-13T03:02:26.388155" elapsed="0.024781"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:26.414829" elapsed="0.001091"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:26.418034" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:26.417002" elapsed="0.001271"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:26.419228" elapsed="0.000072"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:26.418665" elapsed="0.000741"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:26.418507" elapsed="0.001026"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:26.420146" elapsed="0.000065"/>
</return>
<status status="PASS" start="2026-04-13T03:02:26.419889" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:26.419782" elapsed="0.000537"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:26.420402" elapsed="0.000037"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:26.424888" elapsed="0.000361"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:26.425528" elapsed="0.000198"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:26.425911" elapsed="0.000108"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:26.421604" elapsed="0.004526"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:25.767362" elapsed="0.658995"/>
</kw>
<msg time="2026-04-13T03:02:26.426684" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:25.766415" elapsed="0.660337"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:25.765667" elapsed="0.661171"/>
</kw>
<msg time="2026-04-13T03:02:26.426881" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:25.764916" elapsed="0.662013"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:26.429792" elapsed="0.000325"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:26.430271" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:26.430556" elapsed="0.000116"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:26.427268" elapsed="0.003460"/>
</kw>
<msg time="2026-04-13T03:02:26.430826" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:25.763137" elapsed="0.667715"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:26.431303" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:26.431027" elapsed="0.000320"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:26.431391" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T03:02:26.431553" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:25.760927" elapsed="0.670651"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:26.431641" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:02:26.431796" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:25.758578" elapsed="0.673243"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:26.432376" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:26.431965" elapsed="0.000493">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:25.757488" elapsed="0.675091">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:28.436712" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:28.435730" elapsed="0.001070"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:28.438299" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:28.437851" elapsed="0.000490"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:28.439597" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:28.439792" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:28.439337" elapsed="0.000495"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:28.445679" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:28.445158" elapsed="0.000697"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:28.445076" elapsed="0.000848"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:28.447574" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:28.447884" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:28.446819" elapsed="0.001169"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:28.449478" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:28.448864" elapsed="0.000728"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:28.451209" level="INFO">${conn_id} = 539</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:28.450419" elapsed="0.000896"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:28.453497" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:28.453579" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:28.453183" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:28.453835" elapsed="0.000345"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:28.455101" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:28.809602" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:25 UTC 2026

  System load:  0.27               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:26 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:28.454756" elapsed="0.355009"/>
</kw>
<msg time="2026-04-13T03:02:28.809849" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:28.454388" elapsed="0.355547"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:28.452386" elapsed="0.357836"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:28.811501" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:28.834561" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:28.835129" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:28.835472" 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-04-13T03:02:28.811109" elapsed="0.024620"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:28.837560" elapsed="0.000903"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:28.840608" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:28.839533" elapsed="0.001360"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:28.841502" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:28.841175" elapsed="0.000435"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:28.841093" elapsed="0.000620"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:28.842204" elapsed="0.000077"/>
</return>
<status status="PASS" start="2026-04-13T03:02:28.841919" elapsed="0.000430"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:28.841850" elapsed="0.000582"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:28.842545" elapsed="0.000053"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:28.848552" 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-04-13T03:02:28.849318" elapsed="0.000226"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:28.849819" 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-04-13T03:02:28.844246" elapsed="0.005874"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:28.442814" elapsed="0.407619"/>
</kw>
<msg time="2026-04-13T03:02:28.850964" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:28.441784" elapsed="0.409263"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:28.440933" elapsed="0.410228"/>
</kw>
<msg time="2026-04-13T03:02:28.851218" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:28.440069" elapsed="0.411214"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:28.854730" elapsed="0.000327"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:28.855210" elapsed="0.000153"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:28.855499" 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-04-13T03:02:28.851812" elapsed="0.003892"/>
</kw>
<msg time="2026-04-13T03:02:28.855802" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:28.438690" elapsed="0.417138"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:28.856263" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:28.856001" elapsed="0.000308"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:28.856353" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:02:28.856524" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:28.437206" elapsed="0.419344"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:28.856599" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T03:02:28.856766" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:28.434742" elapsed="0.422050"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:28.857332" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:28.856934" elapsed="0.000472">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:28.433463" elapsed="0.424056">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:30.860133" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:30.859593" elapsed="0.000602"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:30.861466" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:30.861071" elapsed="0.000435"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:30.862870" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:30.863017" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:30.862608" elapsed="0.000447"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:30.868917" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:30.868276" elapsed="0.000755"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:30.868191" elapsed="0.000924"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:30.871073" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:30.871333" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:30.870325" elapsed="0.001114"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:30.872887" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:30.872287" elapsed="0.000731"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:30.874804" 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-04-13T03:02:30.873981" elapsed="0.000958"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:30.877354" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:30.877438" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:30.877056" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:30.877808" elapsed="0.000470"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:30.879206" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:31.194486" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:25 UTC 2026

  System load:  0.27               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:28 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:30.878876" elapsed="0.315935"/>
</kw>
<msg time="2026-04-13T03:02:31.194980" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:30.878498" elapsed="0.316643"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:30.876257" elapsed="0.319510"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:31.198444" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:31.221786" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:31.222360" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:31.222748" 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-04-13T03:02:31.197923" elapsed="0.025044"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:31.224830" elapsed="0.001151"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:31.228384" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:31.227214" elapsed="0.001462"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:31.229575" elapsed="0.000112"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:31.229055" elapsed="0.000787"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:31.228925" elapsed="0.001051"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:31.230932" elapsed="0.000130"/>
</return>
<status status="PASS" start="2026-04-13T03:02:31.230310" elapsed="0.000867"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:31.230200" elapsed="0.001108"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:31.231494" elapsed="0.000168"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:31.237657" 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-04-13T03:02:31.238317" elapsed="0.000195"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:31.238770" elapsed="0.000111"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:31.234303" elapsed="0.004714"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:30.866035" elapsed="0.373210"/>
</kw>
<msg time="2026-04-13T03:02:31.239554" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:30.865051" elapsed="0.374571"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:30.864096" elapsed="0.375635"/>
</kw>
<msg time="2026-04-13T03:02:31.239773" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:30.863298" elapsed="0.376523"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:31.242759" elapsed="0.000364"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:31.243280" elapsed="0.000157"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:31.243572" elapsed="0.000119"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:31.240189" elapsed="0.003557"/>
</kw>
<msg time="2026-04-13T03:02:31.243845" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:30.861989" elapsed="0.381883"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:31.244331" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:31.244067" elapsed="0.000309"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:31.244422" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:02:31.244587" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:30.860479" elapsed="0.384133"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:31.244680" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:02:31.244833" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:30.859069" elapsed="0.385790"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:31.245426" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:31.245003" elapsed="0.000501">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:30.858132" elapsed="0.387489">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:33.249265" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:33.248465" elapsed="0.000868"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:33.251427" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:33.250716" elapsed="0.000774"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:33.253739" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:33.253991" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:33.253317" elapsed="0.000736"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:33.259137" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:33.258256" elapsed="0.000977"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:33.258194" elapsed="0.001101"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:33.260597" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:33.260918" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:33.260109" elapsed="0.000919"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:33.262490" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:33.261845" elapsed="0.000761"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:33.264343" level="INFO">${conn_id} = 545</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:33.263558" elapsed="0.000886"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:33.266943" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:33.267027" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:33.266557" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:33.267293" elapsed="0.000513"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:33.268786" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:33.598874" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:25 UTC 2026

  System load:  0.27               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:31 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:33.268411" elapsed="0.330668"/>
</kw>
<msg time="2026-04-13T03:02:33.599169" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:33.268024" elapsed="0.331238"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:33.265490" elapsed="0.334073"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:33.600892" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:33.624067" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:33.624698" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:33.625043" 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-04-13T03:02:33.600471" elapsed="0.024901"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:33.627542" elapsed="0.001126"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:33.631126" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:33.629921" elapsed="0.001375"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:33.631763" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:33.631474" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:33.631411" elapsed="0.000497"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:33.632308" elapsed="0.000094"/>
</return>
<status status="PASS" start="2026-04-13T03:02:33.632060" elapsed="0.000415"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:33.632007" elapsed="0.000547"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:33.632689" elapsed="0.000061"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:33.637222" 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-04-13T03:02:33.637856" elapsed="0.000175"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:33.638210" elapsed="0.000119"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:33.634026" elapsed="0.004423"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:33.256787" elapsed="0.381900"/>
</kw>
<msg time="2026-04-13T03:02:33.639009" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:33.255980" elapsed="0.383095"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:33.255417" elapsed="0.383742"/>
</kw>
<msg time="2026-04-13T03:02:33.639201" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:33.254385" elapsed="0.384862"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:33.641955" elapsed="0.000322"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:33.642427" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:33.642724" elapsed="0.000131"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:33.639525" elapsed="0.003400"/>
</kw>
<msg time="2026-04-13T03:02:33.643168" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:33.252061" elapsed="0.391142"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:33.643763" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:33.643429" elapsed="0.000387"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:33.643872" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T03:02:33.644039" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:33.249792" elapsed="0.394274"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:33.644114" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:02:33.644278" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:33.247617" elapsed="0.396707"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:33.644916" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:33.644480" elapsed="0.000538">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:33.246497" elapsed="0.398646">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:35.648839" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:35.647974" elapsed="0.000940"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:35.651126" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:35.650429" elapsed="0.000764"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:35.652858" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:35.653041" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:35.652603" elapsed="0.000487"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:35.660191" elapsed="0.000077"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:35.659312" elapsed="0.001036"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:35.658827" elapsed="0.001633"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:35.662513" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:35.662958" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:35.661880" elapsed="0.001251"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:35.665175" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:35.664474" elapsed="0.000837"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:35.667213" level="INFO">${conn_id} = 548</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:35.666379" elapsed="0.000952"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:35.670120" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:35.670229" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:35.669583" elapsed="0.000681"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:35.670532" elapsed="0.000489"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:35.672228" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:35.994973" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:25 UTC 2026

  System load:  0.27               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:33 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:35.671766" elapsed="0.323477"/>
</kw>
<msg time="2026-04-13T03:02:35.995330" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:35.671288" elapsed="0.324130"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:35.668622" elapsed="0.327115"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:35.997069" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:36.020122" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:36.020852" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:36.021191" 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-04-13T03:02:35.996665" elapsed="0.024740"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:36.023282" elapsed="0.001079"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:36.026119" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:36.025405" elapsed="0.000873"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:36.026904" elapsed="0.000052"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:36.026522" elapsed="0.000506"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:36.026436" elapsed="0.000678"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:36.027708" elapsed="0.000089"/>
</return>
<status status="PASS" start="2026-04-13T03:02:36.027328" elapsed="0.000548"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:36.027256" elapsed="0.000712"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:36.028093" elapsed="0.000055"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:36.034788" elapsed="0.000533"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:36.035623" elapsed="0.000279"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:36.036169" elapsed="0.000267"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:36.030078" elapsed="0.006539"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:35.656469" elapsed="0.380515"/>
</kw>
<msg time="2026-04-13T03:02:36.037412" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:35.655125" elapsed="0.382358"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:35.654174" elapsed="0.383392"/>
</kw>
<msg time="2026-04-13T03:02:36.037607" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:35.653308" elapsed="0.384481"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:36.040485" elapsed="0.000357"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:36.040993" elapsed="0.000153"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:36.041281" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:36.038092" elapsed="0.003342"/>
</kw>
<msg time="2026-04-13T03:02:36.041529" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:35.651717" elapsed="0.389837"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:36.042026" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:36.041769" elapsed="0.000301"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:36.042118" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:02:36.042280" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:35.649375" elapsed="0.392930"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:36.042352" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:02:36.042498" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:35.647102" elapsed="0.395420"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:36.043172" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:36.042769" elapsed="0.000480">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:35.645985" elapsed="0.397378">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:38.047169" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:38.046361" elapsed="0.000880"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:38.049534" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:38.048805" elapsed="0.000795"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:38.051139" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:38.051286" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:38.050906" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:38.056808" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:38.056151" elapsed="0.000776"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:38.055757" elapsed="0.001257"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:38.058926" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:38.059279" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:38.058252" elapsed="0.001174"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:38.061479" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:38.060569" elapsed="0.001123"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:38.063494" level="INFO">${conn_id} = 551</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:38.062784" elapsed="0.000811"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:38.065809" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:38.065890" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:38.065489" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:38.066114" elapsed="0.000343"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:38.067485" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:38.388723" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:25 UTC 2026

  System load:  0.27               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:35 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:38.067151" elapsed="0.321757"/>
</kw>
<msg time="2026-04-13T03:02:38.389018" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:38.066797" elapsed="0.322327"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:38.064672" elapsed="0.324825"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:38.391271" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:38.414750" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:38.415403" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:38.415868" 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-04-13T03:02:38.390756" elapsed="0.025359"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:38.418341" elapsed="0.001171"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:38.422304" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:38.421030" elapsed="0.001576"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:38.423585" elapsed="0.000289"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:38.423020" elapsed="0.000974"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:38.422890" elapsed="0.001234"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:38.424972" elapsed="0.000125"/>
</return>
<status status="PASS" start="2026-04-13T03:02:38.424473" elapsed="0.000760"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:38.424363" elapsed="0.001010"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:38.425623" elapsed="0.000120"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:38.432559" elapsed="0.000422"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:38.433198" elapsed="0.000181"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:38.433583" 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-04-13T03:02:38.427276" elapsed="0.006572"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:38.053948" elapsed="0.380158"/>
</kw>
<msg time="2026-04-13T03:02:38.434438" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:38.052980" elapsed="0.381530"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:38.052237" elapsed="0.382354"/>
</kw>
<msg time="2026-04-13T03:02:38.434649" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:38.051526" elapsed="0.383171"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:38.437792" 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-04-13T03:02:38.438385" elapsed="0.000165"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:38.438705" elapsed="0.000103"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:38.435033" elapsed="0.003828"/>
</kw>
<msg time="2026-04-13T03:02:38.438957" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:38.050124" elapsed="0.388859"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:38.439425" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:38.439165" elapsed="0.000305"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:38.439518" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T03:02:38.439729" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:38.047732" elapsed="0.392024"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:38.439804" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:02:38.439952" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:38.045541" elapsed="0.394435"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:38.440520" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:38.440117" elapsed="0.000482">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:38.044424" elapsed="0.396430">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:40.444937" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:40.444062" elapsed="0.000947"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:40.447284" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:40.446569" elapsed="0.000777"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:40.448534" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:40.448734" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:40.448286" elapsed="0.000489"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:40.453931" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:40.453252" elapsed="0.000791"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:40.453173" elapsed="0.000954"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:40.456128" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:40.456468" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:40.455218" elapsed="0.001389"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:40.458468" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:40.457709" elapsed="0.000964"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:40.460388" level="INFO">${conn_id} = 554</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:40.459697" elapsed="0.000789"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:40.462596" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:40.462720" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:40.462304" elapsed="0.000442"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:40.462947" elapsed="0.000343"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:40.464194" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:40.784359" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:25 UTC 2026

  System load:  0.27               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:38 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:40.463869" elapsed="0.320660"/>
</kw>
<msg time="2026-04-13T03:02:40.784617" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:40.463496" elapsed="0.321237"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:40.461555" elapsed="0.323470"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:40.786323" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:40.809303" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:40.809857" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:40.810189" 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-04-13T03:02:40.785928" elapsed="0.024468"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:40.812242" elapsed="0.001004"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:40.815473" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:40.814326" elapsed="0.001345"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:40.816312" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:40.815902" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:40.815823" elapsed="0.000677"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:40.817009" elapsed="0.000075"/>
</return>
<status status="PASS" start="2026-04-13T03:02:40.816725" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:40.816655" elapsed="0.000578"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:40.817342" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:40.823307" 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-04-13T03:02:40.824073" elapsed="0.000230"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:40.824552" elapsed="0.000164"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:40.819006" elapsed="0.005863"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:40.451350" elapsed="0.373827"/>
</kw>
<msg time="2026-04-13T03:02:40.825600" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:40.450416" elapsed="0.375284"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:40.449695" elapsed="0.376121"/>
</kw>
<msg time="2026-04-13T03:02:40.825874" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:40.448995" elapsed="0.376944"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:40.829167" 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-04-13T03:02:40.829653" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:40.829936" 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-04-13T03:02:40.826323" elapsed="0.003761"/>
</kw>
<msg time="2026-04-13T03:02:40.830176" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:40.447734" elapsed="0.382467"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:40.830614" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:40.830366" elapsed="0.000332"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:40.830742" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:02:40.830923" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:40.445624" elapsed="0.385326"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:40.831002" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T03:02:40.831193" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:40.443171" elapsed="0.388051"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:40.831803" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:40.831366" elapsed="0.000516">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:40.442025" elapsed="0.389973">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:42.835557" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:42.834800" elapsed="0.000856"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:42.837322" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:42.836932" elapsed="0.000429"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:42.838512" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:42.838796" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:42.838239" elapsed="0.000596"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:42.844141" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:42.843462" elapsed="0.000792"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:42.843382" elapsed="0.000955"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:42.845977" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:42.846228" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:42.845236" elapsed="0.001090"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:42.847682" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:42.847118" elapsed="0.000673"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:42.849329" level="INFO">${conn_id} = 557</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:42.848583" elapsed="0.000844"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:42.851689" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:42.851791" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:42.851275" elapsed="0.000548"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:42.852123" elapsed="0.000455"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:42.853773" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:43.180202" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:25 UTC 2026

  System load:  0.27               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:40 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:42.853324" elapsed="0.327183"/>
</kw>
<msg time="2026-04-13T03:02:43.180700" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:42.852871" elapsed="0.328001"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:42.850439" elapsed="0.330983"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:43.184069" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:43.207253" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:43.207527" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:43.207805" 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-04-13T03:02:43.183277" elapsed="0.024742"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:43.209897" elapsed="0.000939"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:43.212967" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:43.211926" elapsed="0.001275"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:43.214098" elapsed="0.000068"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:43.213558" elapsed="0.000714"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:43.213430" elapsed="0.000967"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:43.215191" elapsed="0.000117"/>
</return>
<status status="PASS" start="2026-04-13T03:02:43.214747" elapsed="0.000666"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:43.214610" elapsed="0.000952"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:43.215808" elapsed="0.000084"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:43.220816" elapsed="0.000346"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:43.221429" elapsed="0.000171"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:43.221800" 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-04-13T03:02:43.217608" elapsed="0.004406"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:42.841470" elapsed="0.380770"/>
</kw>
<msg time="2026-04-13T03:02:43.222546" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:42.840513" elapsed="0.382096"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:42.839761" elapsed="0.382949"/>
</kw>
<msg time="2026-04-13T03:02:43.222753" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:42.839047" elapsed="0.383754"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:43.225563" elapsed="0.000363"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:43.226211" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:43.226538" elapsed="0.000127"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:43.223081" elapsed="0.003648"/>
</kw>
<msg time="2026-04-13T03:02:43.226829" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:42.837668" elapsed="0.389186"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:43.227280" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:43.227028" elapsed="0.000296"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:43.227367" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:02:43.227524" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:42.836157" elapsed="0.391392"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:43.227595" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:02:43.227762" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:42.833887" elapsed="0.393900"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:43.228361" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:43.227931" elapsed="0.000522">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:42.832825" elapsed="0.395745">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:45.231088" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:45.230546" elapsed="0.000591"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:45.232494" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:45.232087" elapsed="0.000447"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:45.233999" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:45.234180" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:45.233690" elapsed="0.000538"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:45.240032" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:45.239333" elapsed="0.000916"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:45.239249" elapsed="0.001090"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:45.242855" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:45.243225" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:45.241585" elapsed="0.001785"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:45.245530" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:45.244537" elapsed="0.001237"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:45.247622" level="INFO">${conn_id} = 560</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:45.246756" elapsed="0.001019"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:45.249995" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:45.250075" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:45.249670" elapsed="0.000432"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:45.250307" elapsed="0.000548"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:45.251786" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:45.592592" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:25 UTC 2026

  System load:  0.27               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:43 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:45.251430" elapsed="0.341338"/>
</kw>
<msg time="2026-04-13T03:02:45.592879" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:45.251068" elapsed="0.341898"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:45.248839" elapsed="0.344409"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:45.594546" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:45.617362" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:45.617953" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:45.618285" 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-04-13T03:02:45.594149" elapsed="0.024347"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:45.620492" elapsed="0.001043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:45.623552" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:45.622582" elapsed="0.001280"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:45.624731" elapsed="0.000067"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:45.624209" elapsed="0.000692"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:45.624089" elapsed="0.001078"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:45.625920" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-04-13T03:02:45.625538" elapsed="0.000485"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:45.625426" elapsed="0.000656"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:45.626162" elapsed="0.000039"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:45.630373" elapsed="0.000351"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:45.630927" elapsed="0.000306"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:45.631411" elapsed="0.000102"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:45.627285" elapsed="0.004335"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:45.237247" elapsed="0.394675"/>
</kw>
<msg time="2026-04-13T03:02:45.632293" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:45.236187" elapsed="0.396167"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:45.235302" elapsed="0.397137"/>
</kw>
<msg time="2026-04-13T03:02:45.632480" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:45.234448" elapsed="0.398079"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:45.635238" elapsed="0.000319"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:45.635816" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:45.636102" 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-04-13T03:02:45.632828" elapsed="0.003423"/>
</kw>
<msg time="2026-04-13T03:02:45.636344" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:45.232901" elapsed="0.403469"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:45.636804" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:45.636534" elapsed="0.000315"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:45.636892" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:02:45.637047" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:45.231442" elapsed="0.405631"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:45.637120" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T03:02:45.637266" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:45.230017" elapsed="0.407273"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:45.637872" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:45.637460" elapsed="0.000487">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:45.229241" elapsed="0.408820">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:47.641722" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:47.640888" elapsed="0.000909"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:47.643889" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:47.643232" elapsed="0.000719"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:47.645742" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:47.645975" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:47.645353" elapsed="0.000680"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:47.652411" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:47.651381" elapsed="0.001151"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:47.651295" elapsed="0.001324"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:47.654470" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:47.654882" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:47.653792" elapsed="0.001234"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:47.657119" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:47.656217" elapsed="0.001062"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:47.659567" level="INFO">${conn_id} = 563</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:47.658785" elapsed="0.000920"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:47.661895" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:47.661986" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:47.661530" elapsed="0.000481"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:47.662215" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:47.663893" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:48.003620" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:25 UTC 2026

  System load:  0.27               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:45 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:47.663485" elapsed="0.340402"/>
</kw>
<msg time="2026-04-13T03:02:48.004044" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:47.663060" elapsed="0.341134"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:47.660735" elapsed="0.344073"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:48.007518" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:48.031694" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:48.032320" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:48.032703" 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-04-13T03:02:48.006735" elapsed="0.026191"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:48.034884" elapsed="0.000995"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:48.037548" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:48.036709" elapsed="0.001044"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:48.038498" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:48.037999" elapsed="0.000615"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:48.037912" elapsed="0.000829"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:48.039256" elapsed="0.000085"/>
</return>
<status status="PASS" start="2026-04-13T03:02:48.038955" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:48.038884" elapsed="0.000612"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:48.039614" elapsed="0.000079"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:48.046058" 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-04-13T03:02:48.046923" elapsed="0.000248"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:48.047436" 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-04-13T03:02:48.041317" elapsed="0.006454"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:47.649175" elapsed="0.398864"/>
</kw>
<msg time="2026-04-13T03:02:48.048353" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:47.648180" elapsed="0.400238"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:47.647378" elapsed="0.401125"/>
</kw>
<msg time="2026-04-13T03:02:48.048544" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:47.646352" elapsed="0.402239"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:48.051403" 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-04-13T03:02:48.051961" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:48.052246" 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-04-13T03:02:48.048963" elapsed="0.003432"/>
</kw>
<msg time="2026-04-13T03:02:48.052488" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:47.644431" elapsed="0.408082"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:48.052951" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:48.052697" elapsed="0.000298"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:48.053040" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:02:48.053195" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:47.642226" elapsed="0.410994"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:48.053267" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:02:48.053413" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:47.640068" elapsed="0.413369"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:48.054019" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:48.053578" elapsed="0.000515">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:47.639045" elapsed="0.415162">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:50.057536" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:50.056797" elapsed="0.000808"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:50.059555" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:50.058958" elapsed="0.000656"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:50.061229" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:50.061371" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:50.061010" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:50.067047" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:50.066370" elapsed="0.000790"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:50.065862" elapsed="0.001381"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:50.069007" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:50.069250" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:50.068378" elapsed="0.000970"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:50.070680" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:50.070121" elapsed="0.000666"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:50.072345" level="INFO">${conn_id} = 566</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:50.071576" elapsed="0.000867"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:50.074719" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:50.074797" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:50.074417" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:50.075016" elapsed="0.000425"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:50.076399" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:50.443973" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:25 UTC 2026

  System load:  0.27               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:47 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:50.076074" elapsed="0.368071"/>
</kw>
<msg time="2026-04-13T03:02:50.444245" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:50.075664" elapsed="0.368675"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:50.073506" elapsed="0.371203"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:50.446237" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:50.469549" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:50.470383" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-13T03:02:50.470830" 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-04-13T03:02:50.445792" elapsed="0.025288"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:50.473292" elapsed="0.001056"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:50.476582" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:50.475442" elapsed="0.001420"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:50.477496" elapsed="0.000047"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:50.477139" elapsed="0.000475"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:50.477048" elapsed="0.000678"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:50.478304" elapsed="0.000087"/>
</return>
<status status="PASS" start="2026-04-13T03:02:50.477951" elapsed="0.000516"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:50.477876" elapsed="0.000680"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:50.478774" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:50.485789" 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-04-13T03:02:50.486749" elapsed="0.000257"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:50.487320" elapsed="0.000163"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:50.480661" elapsed="0.007012"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:50.064043" elapsed="0.424089"/>
</kw>
<msg time="2026-04-13T03:02:50.488612" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:50.063051" elapsed="0.425679"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:50.062309" elapsed="0.426546"/>
</kw>
<msg time="2026-04-13T03:02:50.488917" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:50.061610" elapsed="0.427360"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:50.491794" elapsed="0.000392"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:50.492344" elapsed="0.000173"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:50.492674" elapsed="0.000103"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:50.489262" elapsed="0.003578"/>
</kw>
<msg time="2026-04-13T03:02:50.493014" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:50.060149" elapsed="0.432892"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:50.493510" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:50.493227" elapsed="0.000333"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:50.493611" elapsed="0.000058"/>
</return>
<msg time="2026-04-13T03:02:50.493806" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:50.058058" elapsed="0.435775"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:50.493883" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:02:50.494033" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:50.056001" elapsed="0.438058"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-13T03:02:50.494624" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-13T03:02:50.494204" elapsed="0.000565">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-13T03:02:50.054962" elapsed="0.439924">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:52.498560" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:52.498166" elapsed="0.000430"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:52.499513" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:52.499233" elapsed="0.000307"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:52.500381" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:52.500487" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:52.500178" elapsed="0.000336"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:52.506165" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:52.505467" elapsed="0.000802"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:52.504955" elapsed="0.001377"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:52.507623" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:52.507899" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:52.507134" elapsed="0.000942"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:52.509540" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:52.508942" elapsed="0.000722"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:52.511268" level="INFO">${conn_id} = 569</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:52.510448" elapsed="0.000920"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:52.513598" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:52.513696" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:52.513304" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:52.513923" elapsed="0.000352"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:52.515182" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:52.840067" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:25 UTC 2026

  System load:  0.27               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:50 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:52.514854" elapsed="0.325513"/>
</kw>
<msg time="2026-04-13T03:02:52.840477" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:52.514483" elapsed="0.326103"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:52.512490" elapsed="0.328501"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:52.842855" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-13T03:02:52.865973" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:52.866571" level="INFO">${stdout} = 0</msg>
<msg time="2026-04-13T03:02:52.866966" 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-04-13T03:02:52.842284" elapsed="0.024900"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:52.869216" elapsed="0.001002"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:52.872354" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:52.871289" elapsed="0.001307"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:52.873572" elapsed="0.000134"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:52.872986" elapsed="0.000877"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:52.872860" elapsed="0.001153"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:52.874403" elapsed="0.000062"/>
</return>
<status status="PASS" start="2026-04-13T03:02:52.874191" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:52.874140" elapsed="0.000437"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:52.874697" elapsed="0.000046"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:52.881048" elapsed="0.000439"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:52.881717" elapsed="0.000220"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:52.882154" 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-04-13T03:02:52.875952" elapsed="0.006449"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:52.502994" elapsed="0.379677"/>
</kw>
<msg time="2026-04-13T03:02:52.883023" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:52.502005" elapsed="0.381089"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:52.501303" elapsed="0.381911"/>
</kw>
<msg time="2026-04-13T03:02:52.883260" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:52.500680" elapsed="0.382629"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:52.886288" elapsed="0.000369"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:52.886817" elapsed="0.000173"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:52.887134" elapsed="0.000103"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:52.883612" elapsed="0.003680"/>
</kw>
<msg time="2026-04-13T03:02:52.887389" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:52.499765" elapsed="0.387651"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:52.887976" level="INFO">0</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:52.887671" elapsed="0.000353"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:52.888074" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T03:02:52.888261" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:52.498822" elapsed="0.389467"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-13T03:02:52.888339" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:02:52.888489" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-13T03:02:52.497198" elapsed="0.391317"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-13T03:02:52.888760" elapsed="0.000397"/>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="PASS" start="2026-04-13T03:02:52.495833" elapsed="0.393390"/>
</kw>
<arg>${timeout}</arg>
<arg>2s</arg>
<arg>Verify_Karaf_Is_Not_Running_On_Member</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-13T02:59:00.235456" elapsed="232.653866"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-13T02:59:00.235320" elapsed="232.654044"/>
</iter>
<var>${index}</var>
<value>@{stop_index_list}</value>
<status status="PASS" start="2026-04-13T02:58:49.856981" elapsed="243.032423"/>
</for>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:02:52.892878" 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-04-13T03:02:52.892439" elapsed="0.000468"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T03:02:52.893425" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T03:02:52.893057" elapsed="0.000396"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-13T03:02:52.893501" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:02:52.893678" 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-04-13T03:02:52.891988" elapsed="0.001716"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:52.894789" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:52.894499" elapsed="0.000317"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:52.895581" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:52.895702" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:52.895426" elapsed="0.000304"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:52.898435" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:52.898158" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:52.898134" elapsed="0.000385"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:52.899048" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:52.899175" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:52.898674" elapsed="0.000529"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:52.899857" level="INFO">Attempting to execute command "netstat -pnatu | grep 2550" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:52.899345" elapsed="0.000562"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:52.900533" level="INFO">${conn_id} = 572</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:52.900053" elapsed="0.000507"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:52.901895" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:52.902037" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:52.901234" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:52.902254" elapsed="0.000714"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:52.905080" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:53.586740" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:53 UTC 2026

  System load:  0.01               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 02:58:52 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T03:02:52.904407" elapsed="0.682693"/>
</kw>
<msg time="2026-04-13T03:02:53.587241" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:52.903197" elapsed="0.684217"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:52.900791" elapsed="0.686797"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:53.588134" level="INFO">Executing command 'netstat -pnatu | grep 2550'.</msg>
<msg time="2026-04-13T03:02:53.600795" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T03:02:53.601032" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T03:02:53.601107" level="INFO">${stderr} = bash: line 1: netstat: command not found</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T03:02:53.587851" elapsed="0.013290"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:53.601396" elapsed="0.000507"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:53.603030" level="INFO">bash: line 1: netstat: command not found</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:53.602230" elapsed="0.000929"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:53.603797" elapsed="0.000053"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:53.603381" elapsed="0.000592"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:53.603326" elapsed="0.000711"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:53.604495" elapsed="0.000089"/>
</return>
<status status="PASS" start="2026-04-13T03:02:53.604189" elapsed="0.000544"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:53.604141" elapsed="0.000671"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:53.604915" elapsed="0.000046"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:53.622931" elapsed="0.000589"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:53.623702" elapsed="0.000199"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:53.624045" elapsed="0.000113"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:53.605819" elapsed="0.018397"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:52.897585" elapsed="0.726727"/>
</kw>
<msg time="2026-04-13T03:02:53.624372" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:52.896930" elapsed="0.727503"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:52.896394" elapsed="0.728124"/>
</kw>
<msg time="2026-04-13T03:02:53.624560" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:52.895873" elapsed="0.728735"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:53.627524" elapsed="0.000346"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:53.628057" elapsed="0.000204"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:53.628442" elapsed="0.000128"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:53.624928" elapsed="0.003728"/>
</kw>
<msg time="2026-04-13T03:02:53.628776" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:52.895028" elapsed="0.733780"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:53.629354" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:53.629038" elapsed="0.000369"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:53.629468" elapsed="0.000039"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:52.894103" elapsed="0.735509"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-13T03:02:52.893914" elapsed="0.736077"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:53.630997" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:53.630707" elapsed="0.000401"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:53.631890" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:53.631995" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:53.631733" elapsed="0.000289"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:53.634697" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:53.634416" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:53.634394" elapsed="0.000386"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:53.635046" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:53.635149" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:53.634914" elapsed="0.000261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:53.635796" level="INFO">Attempting to execute command "netstat -pnatu | grep 2550" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:53.635311" elapsed="0.000533"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:53.636405" level="INFO">${conn_id} = 575</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:53.635989" elapsed="0.000443"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:53.637591" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:53.637756" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:53.637070" elapsed="0.000711"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:53.637957" elapsed="0.000663"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:53.640841" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:54.452135" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:53 UTC 2026

  System load:  0.01               Processes:             122
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 02:59:00 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:53.640217" elapsed="0.812312"/>
</kw>
<msg time="2026-04-13T03:02:54.452823" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:53.638849" elapsed="0.814312"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:53.636652" elapsed="0.816845"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:54.454465" level="INFO">Executing command 'netstat -pnatu | grep 2550'.</msg>
<msg time="2026-04-13T03:02:54.467806" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T03:02:54.468094" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T03:02:54.468228" level="INFO">${stderr} = bash: line 1: netstat: command not found</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T03:02:54.453938" elapsed="0.014353"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:54.468916" elapsed="0.000637"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:54.470788" level="INFO">bash: line 1: netstat: command not found</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:54.469970" elapsed="0.000928"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:54.471461" elapsed="0.000052"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:54.471075" elapsed="0.000534"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:54.471024" 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-04-13T03:02:54.472322" elapsed="0.000087"/>
</return>
<status status="PASS" start="2026-04-13T03:02:54.471899" elapsed="0.000598"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:54.471852" elapsed="0.000703"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:54.472688" elapsed="0.000037"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:54.489126" elapsed="0.000635"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:54.489937" elapsed="0.000232"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:54.490315" elapsed="0.000109"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:54.473418" elapsed="0.017064"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:53.633870" elapsed="0.856712"/>
</kw>
<msg time="2026-04-13T03:02:54.490662" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:53.633181" elapsed="0.857550"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:53.632664" elapsed="0.858156"/>
</kw>
<msg time="2026-04-13T03:02:54.490864" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:53.632166" elapsed="0.858747"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:54.494296" elapsed="0.000383"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:54.494837" elapsed="0.000160"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:54.495142" elapsed="0.000105"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:54.491226" elapsed="0.004077"/>
</kw>
<msg time="2026-04-13T03:02:54.495403" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:53.631319" elapsed="0.864111"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:54.495904" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:54.495615" elapsed="0.000333"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:54.495997" elapsed="0.000034"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:53.630276" elapsed="0.865856"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-13T03:02:53.630099" elapsed="0.866084"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:54.497287" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:54.497007" elapsed="0.000307"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:54.498081" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:54.498231" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:54.497937" elapsed="0.000321"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:54.501214" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:54.500947" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:54.500924" elapsed="0.000376"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:54.501568" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:54.501690" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:54.501436" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:54.502457" level="INFO">Attempting to execute command "netstat -pnatu | grep 2550" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:54.501923" elapsed="0.000584"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:54.503104" level="INFO">${conn_id} = 578</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:54.502671" elapsed="0.000462"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:54.504337" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:54.504467" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:54.503789" elapsed="0.000704"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:54.504686" elapsed="0.000691"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:54.507413" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:54.834327" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:25 UTC 2026

  System load:  0.27               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:52 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:54.506824" elapsed="0.327741"/>
</kw>
<msg time="2026-04-13T03:02:54.834721" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:54.505595" elapsed="0.329298"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:54.503343" elapsed="0.331723"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:54.835561" level="INFO">Executing command 'netstat -pnatu | grep 2550'.</msg>
<msg time="2026-04-13T03:02:54.848281" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T03:02:54.848713" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T03:02:54.848867" level="INFO">${stderr} = bash: line 1: netstat: command not found</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T03:02:54.835296" elapsed="0.013656"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:54.849553" elapsed="0.000622"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:54.851507" level="INFO">bash: line 1: netstat: command not found</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:54.850684" elapsed="0.001001"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:54.852218" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:54.851882" elapsed="0.000461"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:54.851826" elapsed="0.000576"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:54.852888" elapsed="0.000074"/>
</return>
<status status="PASS" start="2026-04-13T03:02:54.852571" elapsed="0.000476"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:54.852526" elapsed="0.000581"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:54.853193" elapsed="0.000035"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:54.870063" elapsed="0.000660"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:54.870897" elapsed="0.000193"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:54.871236" elapsed="0.000107"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:54.854074" elapsed="0.017325"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:54.500369" elapsed="0.371129"/>
</kw>
<msg time="2026-04-13T03:02:54.871560" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:54.499731" elapsed="0.371894"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:54.498922" elapsed="0.372883"/>
</kw>
<msg time="2026-04-13T03:02:54.871848" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:54.498403" elapsed="0.373495"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:54.874918" elapsed="0.000343"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:54.875416" elapsed="0.000152"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:54.875722" elapsed="0.000103"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:54.872219" elapsed="0.003661"/>
</kw>
<msg time="2026-04-13T03:02:54.875978" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:54.497519" elapsed="0.378486"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:54.876459" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:54.876196" elapsed="0.000306"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:54.876551" elapsed="0.000033"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:54.496527" elapsed="0.380176"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-13T03:02:54.496317" elapsed="0.380427"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-13T03:02:52.893774" elapsed="1.983007"/>
</for>
<arg>command=netstat -pnatu | grep 2550</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-13T03:02:52.889645" elapsed="1.987197"/>
</kw>
<return>
<value>${updated_index_list}</value>
<status status="PASS" start="2026-04-13T03:02:54.876885" elapsed="0.000027"/>
</return>
<doc>If the list is empty, stops all ODL instances. Otherwise stop members based on ${stop_index_list}
If ${confirm} is True, verify stopped instances are not there anymore.
The KW will return a list of available members: ${updated index_list}=${original_index_list}-${member_index_list}</doc>
<status status="PASS" start="2026-04-13T02:58:47.492900" elapsed="247.384118"/>
</kw>
<kw name="Start_Members_From_List_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:02:54.889642" level="INFO">${base_command} = /tmp/karaf-0.24.0/bin/start</msg>
<var>${base_command}</var>
<arg>"""${karaf_home}""" != ""</arg>
<arg>${karaf_home}/bin/start</arg>
<arg>${NODE_START_COMMAND}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:02:54.889114" elapsed="0.000565"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:02:54.890227" level="INFO">${command} = /tmp/karaf-0.24.0/bin/start</msg>
<var>${command}</var>
<arg>"""${export_java_home}""" != ""</arg>
<arg>export JAVA_HOME="${export_java_home}"; ${base_command}</arg>
<arg>${base_command}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:02:54.889852" elapsed="0.000404"/>
</kw>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-13T03:02:54.890765" level="INFO">${epoch} = 1776049374.890681</msg>
<var>${epoch}</var>
<arg>time_zone=UTC</arg>
<arg>result_format=epoch</arg>
<arg>exclude_millis=False</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-13T03:02:54.890439" elapsed="0.000355"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:02:54.891440" level="INFO">${gc_filepath} = /tmp/karaf-0.24.0/data/log/gc_1776049374.890681.log</msg>
<var>${gc_filepath}</var>
<arg>"""${karaf_home}""" != ""</arg>
<arg>${karaf_home}/data/log/gc_${epoch}.log</arg>
<arg>${GC_LOG_PATH}/gc_${epoch}.log</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:02:54.890983" elapsed="0.000486"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:02:54.892034" level="INFO">${gc_options} = -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.24.0/data/log/gc_1776049374.890681.log</msg>
<var>${gc_options}</var>
<arg>"docker" not in """${node_start_command}"""</arg>
<arg>-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:${gc_filepath}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:02:54.891644" elapsed="0.000418"/>
</kw>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:02:54.893868" 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-04-13T03:02:54.893283" elapsed="0.000615"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T03:02:54.894420" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T03:02:54.894050" elapsed="0.000404"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-13T03:02:54.894516" elapsed="0.000057"/>
</return>
<msg time="2026-04-13T03:02:54.894740" 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-04-13T03:02:54.892886" elapsed="0.001880"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:54.895864" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:54.895559" elapsed="0.000337"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:54.896810" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:54.896916" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:54.896610" elapsed="0.000333"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:54.900192" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:54.899847" elapsed="0.000408"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:54.899814" elapsed="0.000468"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:54.900570" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:54.900697" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:54.900420" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:54.901361" level="INFO">Attempting to execute command "/tmp/karaf-0.24.0/bin/start -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.24.0/data/log/gc_1776049374.890681.log" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:54.900866" elapsed="0.000546"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:54.902010" 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-04-13T03:02:54.901560" elapsed="0.000477"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:54.903273" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:54.903400" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:54.902735" elapsed="0.000690"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:54.903600" elapsed="0.000705"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:54.906345" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:55.228766" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:53 UTC 2026

  System load:  0.01               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:53 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T03:02:54.905740" elapsed="0.323261"/>
</kw>
<msg time="2026-04-13T03:02:55.229135" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:54.904521" elapsed="0.324790"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:54.902247" elapsed="0.327239"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:55.230027" level="INFO">Executing command '/tmp/karaf-0.24.0/bin/start -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.24.0/data/log/gc_1776049374.890681.log'.</msg>
<msg time="2026-04-13T03:02:55.252788" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:55.253124" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T03:02:55.253222" 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-04-13T03:02:55.229745" elapsed="0.023530"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:55.253723" elapsed="0.000567"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:55.255464" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:55.254751" elapsed="0.000808"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:55.256095" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:55.255777" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:55.255725" elapsed="0.000527"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:55.256598" elapsed="0.000095"/>
</return>
<status status="PASS" start="2026-04-13T03:02:55.256367" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:55.256334" elapsed="0.000488"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:55.257014" elapsed="0.000035"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:55.275072" 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-04-13T03:02:55.275861" elapsed="0.000184"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:55.276182" elapsed="0.000102"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:55.257722" elapsed="0.018618"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:54.899234" elapsed="0.377201"/>
</kw>
<msg time="2026-04-13T03:02:55.276498" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:54.898140" elapsed="0.378424"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:54.897598" elapsed="0.379065"/>
</kw>
<msg time="2026-04-13T03:02:55.276706" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:54.897091" elapsed="0.379661"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:55.279843" elapsed="0.000331"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:55.280328" elapsed="0.000153"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:55.280615" elapsed="0.000118"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:55.277054" elapsed="0.003731"/>
</kw>
<msg time="2026-04-13T03:02:55.280884" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:54.896102" elapsed="0.384808"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:55.281347" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:55.281090" elapsed="0.000299"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:55.281437" elapsed="0.000033"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:54.895155" elapsed="0.386843"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-13T03:02:54.894982" elapsed="0.387058"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:55.283028" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:55.282756" elapsed="0.000298"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:55.283808" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:55.283908" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:55.283664" elapsed="0.000270"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:55.286859" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:55.286549" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:55.286491" elapsed="0.000454"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:55.287216" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:55.287320" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:55.287077" elapsed="0.000270"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:55.287974" level="INFO">Attempting to execute command "/tmp/karaf-0.24.0/bin/start -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.24.0/data/log/gc_1776049374.890681.log" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:55.287483" elapsed="0.000618"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:55.288713" level="INFO">${conn_id} = 584</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:55.288248" elapsed="0.000496"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:55.290055" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:55.290185" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:55.289441" elapsed="0.000770"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:55.290392" elapsed="0.000775"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:55.293615" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:55.644596" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:53 UTC 2026

  System load:  0.01               Processes:             122
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:54 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:55.293001" elapsed="0.351855"/>
</kw>
<msg time="2026-04-13T03:02:55.644994" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:55.291419" elapsed="0.353749"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:55.288960" elapsed="0.356385"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:55.645860" level="INFO">Executing command '/tmp/karaf-0.24.0/bin/start -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.24.0/data/log/gc_1776049374.890681.log'.</msg>
<msg time="2026-04-13T03:02:55.669328" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:55.669751" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T03:02:55.669864" 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-04-13T03:02:55.645572" elapsed="0.024353"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:55.670391" elapsed="0.000728"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:55.672336" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:55.671520" elapsed="0.000924"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:55.673011" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:55.672686" elapsed="0.000448"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:55.672581" elapsed="0.000612"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:55.673710" elapsed="0.000079"/>
</return>
<status status="PASS" start="2026-04-13T03:02:55.673327" elapsed="0.000548"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:55.673288" elapsed="0.000649"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:55.674023" elapsed="0.000035"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:55.688844" elapsed="0.000604"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:02:55.689623" elapsed="0.000207"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:55.689969" 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-04-13T03:02:55.674884" elapsed="0.015249"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:55.285965" elapsed="0.404277"/>
</kw>
<msg time="2026-04-13T03:02:55.690306" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:55.285195" elapsed="0.405179"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:55.284585" elapsed="0.405871"/>
</kw>
<msg time="2026-04-13T03:02:55.690576" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:55.284077" elapsed="0.406863"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:55.693693" 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-04-13T03:02:55.694171" elapsed="0.000153"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:55.694458" 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-04-13T03:02:55.691286" elapsed="0.003323"/>
</kw>
<msg time="2026-04-13T03:02:55.695126" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:55.283259" elapsed="0.411894"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:55.695603" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:55.695345" elapsed="0.000316"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:55.695712" elapsed="0.000034"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:55.282320" elapsed="0.413523"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-13T03:02:55.282144" elapsed="0.413737"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:02:55.696846" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:02:55.696559" elapsed="0.000314"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:55.697649" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:55.697756" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:55.697483" elapsed="0.000301"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:55.700911" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:55.700593" elapsed="0.000380"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:55.700570" elapsed="0.000429"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:55.701278" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:02:55.701387" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:02:55.701138" elapsed="0.000276"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:55.702060" level="INFO">Attempting to execute command "/tmp/karaf-0.24.0/bin/start -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.24.0/data/log/gc_1776049374.890681.log" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:55.701556" elapsed="0.000553"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:02:55.702703" 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-04-13T03:02:55.702257" elapsed="0.000474"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:02:55.703966" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:02:55.704093" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:02:55.703416" elapsed="0.000702"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:55.704289" elapsed="0.000690"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:02:55.706972" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:02:56.022367" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:25 UTC 2026

  System load:  0.27               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:54 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:02:55.706339" elapsed="0.316380"/>
</kw>
<msg time="2026-04-13T03:02:56.022850" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:55.705197" elapsed="0.317839"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:02:55.702985" elapsed="0.320222"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:02:56.023713" level="INFO">Executing command '/tmp/karaf-0.24.0/bin/start -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.24.0/data/log/gc_1776049374.890681.log'.</msg>
<msg time="2026-04-13T03:02:56.045890" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-13T03:02:56.046142" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T03:02:56.046244" 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-04-13T03:02:56.023427" elapsed="0.022868"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:56.046680" elapsed="0.000499"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:56.048338" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:56.047553" elapsed="0.000887"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:56.048966" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:56.048619" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:56.048567" elapsed="0.000560"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:02:56.049537" elapsed="0.000060"/>
</return>
<status status="PASS" start="2026-04-13T03:02:56.049246" elapsed="0.000467"/>
</branch>
<status status="PASS" start="2026-04-13T03:02:56.049213" elapsed="0.000556"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:02:56.049844" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:56.066842" 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-04-13T03:02:56.067535" elapsed="0.000178"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:56.067850" elapsed="0.000101"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:56.050507" elapsed="0.017498"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:02:55.700040" elapsed="0.368079"/>
</kw>
<msg time="2026-04-13T03:02:56.068181" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:55.699425" elapsed="0.368809"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:02:55.698880" elapsed="0.369437"/>
</kw>
<msg time="2026-04-13T03:02:56.068359" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:55.697929" elapsed="0.370475"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:02:56.071141" 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-04-13T03:02:56.071808" elapsed="0.000199"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:02:56.072193" elapsed="0.000140"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:02:56.068704" elapsed="0.003706"/>
</kw>
<msg time="2026-04-13T03:02:56.072525" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:02:55.697075" elapsed="0.375480"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:56.073115" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:56.072795" elapsed="0.000364"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:02:56.073205" elapsed="0.000031"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:02:55.696156" elapsed="0.377176"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-13T03:02:55.695982" elapsed="0.377387"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-13T03:02:54.894836" elapsed="1.178569"/>
</for>
<arg>command=${command} ${gc_options}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-13T03:02:54.892318" elapsed="1.181147"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify_Members_Are_Ready" owner="ClusterManagement">
<if>
<branch type="IF" condition="${verify_cluster_sync}">
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:02:56.085450" 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-04-13T03:02:56.084981" elapsed="0.000498"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T03:02:56.085961" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T03:02:56.085644" elapsed="0.000343"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-13T03:02:56.086034" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:02:56.086214" 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-04-13T03:02:56.084600" elapsed="0.001653"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:02:56.088250" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:02:56.087935" elapsed="0.000350"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:02:56.088350" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T03:02:56.088544" 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-04-13T03:02:56.087429" elapsed="0.001141"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:56.095953" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:56.095693" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:02:56.096391" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:02:56.096140" elapsed="0.000303"/>
</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-04-13T03:02:56.102243" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.156', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.156', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</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="FAIL" start="2026-04-13T03:02:56.098485" elapsed="0.007773">ConnectionError: HTTPConnectionPool(host='10.30.170.156', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.156', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<status status="FAIL" start="2026-04-13T03:02:56.096515" elapsed="0.009842">ConnectionError: HTTPConnectionPool(host='10.30.170.156', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.156', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</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-04-13T03:02:56.106544" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:56.106394" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-04-13T03:02:56.096494" elapsed="0.010155">ConnectionError: HTTPConnectionPool(host='10.30.170.156', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.156', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<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="NOT RUN" start="2026-04-13T03:02:56.107226" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T03:02:56.107368" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:56.107329" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:02:56.107310" elapsed="0.000122"/>
</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-04-13T03:02:56.107563" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:02:56.107674" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</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="FAIL" start="2026-04-13T03:02:56.091474" elapsed="0.016317">ConnectionError: HTTPConnectionPool(host='10.30.170.156', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.156', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T03:02:56.107902" elapsed="0.000016"/>
</return>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-04-13T03:02:56.088793" elapsed="0.019214">ConnectionError: HTTPConnectionPool(host='10.30.170.156', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.156', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:56.108252" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-13T03:02:56.108383" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:02:56.108347" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:02:56.108330" elapsed="0.000127"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:56.108659" elapsed="0.000026"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:56.108871" elapsed="0.000024"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="NOT RUN" start="2026-04-13T03:02:56.108938" elapsed="0.000015"/>
</return>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="FAIL" start="2026-04-13T03:02:56.086985" elapsed="0.022057">ConnectionError: HTTPConnectionPool(host='10.30.170.156', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.156', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-13T03:02:56.109165" elapsed="0.000023"/>
</continue>
<status status="NOT RUN" start="2026-04-13T03:02:56.109123" elapsed="0.000096"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:02:56.109106" elapsed="0.000135"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:02:56.109370" elapsed="0.000022"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-13T03:02:56.086537" elapsed="0.022906">ConnectionError: HTTPConnectionPool(host='10.30.170.156', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.156', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-13T03:02:56.086339" elapsed="0.023168">ConnectionError: HTTPConnectionPool(host='10.30.170.156', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.156', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</for>
<arg>${member_index_list}</arg>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="FAIL" start="2026-04-13T03:02:56.084148" elapsed="0.025458">ConnectionError: HTTPConnectionPool(host='10.30.170.156', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.156', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<status status="FAIL" start="2026-04-13T03:02:56.083842" elapsed="0.025843">ConnectionError: HTTPConnectionPool(host='10.30.170.156', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.156', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</branch>
<status status="FAIL" start="2026-04-13T03:02:56.083821" elapsed="0.025897">ConnectionError: HTTPConnectionPool(host='10.30.170.156', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.156', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</if>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Verify_Restconf_Is_Available" owner="ClusterManagement">
<arg>${member_index_list}</arg>
<status status="NOT RUN" start="2026-04-13T03:02:56.109982" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:56.109786" elapsed="0.000271"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:02:56.109770" elapsed="0.000319"/>
</if>
<if>
<branch type="IF" condition="${verify_system_status} and (&quot;${service_list}&quot; != &quot;[[]]&quot;)">
<kw name="Check Status Of Services Is OPERATIONAL" owner="ClusterManagement">
<arg>@{service_list}</arg>
<doc>This keyword will verify whether all the services are operational in all the ODL nodes</doc>
<status status="NOT RUN" start="2026-04-13T03:02:56.110358" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:02:56.110146" elapsed="0.000269"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:02:56.110130" elapsed="0.000309"/>
</if>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Verifies the specified readiness conditions for the given listed members after startup.
If ${verify_cluster_sync}, verifies the datastores have synced with the rest of the cluster.
If True, verifies RESTCONF is available.
If ${verify_system_status}, verifies the system services are OPERATIONAL.</doc>
<status status="FAIL" start="2026-04-13T03:02:56.083393" elapsed="0.027127">ConnectionError: HTTPConnectionPool(host='10.30.170.156', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.156', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Verify_Members_Are_Ready" owner="ClusterManagement">
<if>
<branch type="IF" condition="${verify_cluster_sync}">
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:03:06.129257" 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-04-13T03:03:06.128502" elapsed="0.000805"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T03:03:06.130048" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T03:03:06.129545" elapsed="0.000546"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-13T03:03:06.130169" elapsed="0.000056"/>
</return>
<msg time="2026-04-13T03:03:06.130426" 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-04-13T03:03:06.127935" elapsed="0.002532"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:06.132759" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:06.132243" elapsed="0.000557"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:06.132862" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T03:03:06.133072" 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-04-13T03:03:06.131743" elapsed="0.001368"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:06.144028" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:06.143563" elapsed="0.000548"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:06.145113" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:06.144441" elapsed="0.000779"/>
</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-04-13T03:03:06.204370" level="INFO">GET Request : url=http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:06.204592" level="INFO">GET Response : url=http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=401, reason=Unauthorized 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '524'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 401 Unauthorized&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 401 Unauthorized&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;401&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Unauthorized&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;org.jolokia.osgi.servlet.JolokiaServlet&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-04-13T03:03:06.205159" level="FAIL">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</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="FAIL" start="2026-04-13T03:03:06.149545" elapsed="0.056512">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-13T03:03:06.145393" elapsed="0.060871">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</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-04-13T03:03:06.206773" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:06.206346" elapsed="0.000582"/>
</branch>
<status status="FAIL" start="2026-04-13T03:03:06.145343" elapsed="0.061642">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<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="NOT RUN" start="2026-04-13T03:03:06.208225" elapsed="0.000083"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:06.208611" elapsed="0.000087"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:06.208511" elapsed="0.000276"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:03:06.208466" elapsed="0.000374"/>
</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-04-13T03:03:06.209142" elapsed="0.000051"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:06.209330" elapsed="0.000040"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</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="FAIL" start="2026-04-13T03:03:06.137006" elapsed="0.072587">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:06.209895" elapsed="0.000039"/>
</return>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-04-13T03:03:06.133410" elapsed="0.076789">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:06.210715" elapsed="0.000060"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-13T03:03:06.211012" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:06.210929" elapsed="0.000173"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:03:06.210889" elapsed="0.000261"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:06.211561" elapsed="0.000055"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:06.212058" elapsed="0.000052"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="NOT RUN" start="2026-04-13T03:03:06.212206" elapsed="0.000032"/>
</return>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="FAIL" start="2026-04-13T03:03:06.131172" elapsed="0.081400">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-13T03:03:06.212811" elapsed="0.000023"/>
</continue>
<status status="NOT RUN" start="2026-04-13T03:03:06.212756" elapsed="0.000115"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:03:06.212729" elapsed="0.000173"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:06.213077" elapsed="0.000030"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-13T03:03:06.130865" elapsed="0.082317">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-13T03:03:06.130555" elapsed="0.082704">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</for>
<arg>${member_index_list}</arg>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="FAIL" start="2026-04-13T03:03:06.127314" elapsed="0.086047">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-13T03:03:06.126758" elapsed="0.086678">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<status status="FAIL" start="2026-04-13T03:03:06.126718" elapsed="0.086758">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Verify_Restconf_Is_Available" owner="ClusterManagement">
<arg>${member_index_list}</arg>
<status status="NOT RUN" start="2026-04-13T03:03:06.213759" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:06.213546" elapsed="0.000268"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:03:06.213530" elapsed="0.000307"/>
</if>
<if>
<branch type="IF" condition="${verify_system_status} and (&quot;${service_list}&quot; != &quot;[[]]&quot;)">
<kw name="Check Status Of Services Is OPERATIONAL" owner="ClusterManagement">
<arg>@{service_list}</arg>
<doc>This keyword will verify whether all the services are operational in all the ODL nodes</doc>
<status status="NOT RUN" start="2026-04-13T03:03:06.214087" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:06.213890" elapsed="0.000254"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:03:06.213875" elapsed="0.000291"/>
</if>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Verifies the specified readiness conditions for the given listed members after startup.
If ${verify_cluster_sync}, verifies the datastores have synced with the rest of the cluster.
If True, verifies RESTCONF is available.
If ${verify_system_status}, verifies the system services are OPERATIONAL.</doc>
<status status="FAIL" start="2026-04-13T03:03:06.125913" elapsed="0.088337">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="Verify_Members_Are_Ready" owner="ClusterManagement">
<if>
<branch type="IF" condition="${verify_cluster_sync}">
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:03:16.230588" 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-04-13T03:03:16.230113" elapsed="0.000512"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T03:03:16.231142" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T03:03:16.230813" elapsed="0.000355"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-13T03:03:16.231218" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T03:03:16.231506" 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-04-13T03:03:16.229713" elapsed="0.001822"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:16.233496" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:16.233180" elapsed="0.000345"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:16.233574" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:03:16.233822" 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-04-13T03:03:16.232526" elapsed="0.001325"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:16.240991" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:16.240687" elapsed="0.000359"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:16.241441" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:16.241193" elapsed="0.000293"/>
</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-04-13T03:03:16.249207" level="INFO">GET Request : url=http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:16.249293" level="INFO">GET Response : url=http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=401, reason=Unauthorized 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '524'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 401 Unauthorized&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 401 Unauthorized&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;401&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Unauthorized&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;org.jolokia.osgi.servlet.JolokiaServlet&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-04-13T03:03:16.249443" level="FAIL">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</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="FAIL" start="2026-04-13T03:03:16.243582" elapsed="0.006365">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-13T03:03:16.241567" elapsed="0.008483">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</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-04-13T03:03:16.250266" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:16.250089" elapsed="0.000246"/>
</branch>
<status status="FAIL" start="2026-04-13T03:03:16.241542" elapsed="0.008819">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<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="NOT RUN" start="2026-04-13T03:03:16.250936" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:16.251088" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:16.251045" elapsed="0.000089"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:03:16.251021" elapsed="0.000135"/>
</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-04-13T03:03:16.251290" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:16.251360" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</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="FAIL" start="2026-04-13T03:03:16.236507" elapsed="0.014971">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:16.251551" elapsed="0.000016"/>
</return>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-04-13T03:03:16.234058" elapsed="0.017607">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:16.251942" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-13T03:03:16.252073" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:16.252035" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:03:16.252018" elapsed="0.000118"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:16.252321" elapsed="0.000024"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:16.252526" elapsed="0.000023"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="NOT RUN" start="2026-04-13T03:03:16.252592" elapsed="0.000015"/>
</return>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="FAIL" start="2026-04-13T03:03:16.232158" elapsed="0.020555">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-13T03:03:16.252840" elapsed="0.000019"/>
</continue>
<status status="NOT RUN" start="2026-04-13T03:03:16.252797" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:03:16.252779" elapsed="0.000129"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:16.253039" elapsed="0.000021"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-13T03:03:16.231921" elapsed="0.021189">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-13T03:03:16.231648" elapsed="0.021525">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</for>
<arg>${member_index_list}</arg>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="FAIL" start="2026-04-13T03:03:16.229262" elapsed="0.024010">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-13T03:03:16.228827" elapsed="0.024504">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<status status="FAIL" start="2026-04-13T03:03:16.228798" elapsed="0.024564">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Verify_Restconf_Is_Available" owner="ClusterManagement">
<arg>${member_index_list}</arg>
<status status="NOT RUN" start="2026-04-13T03:03:16.253622" elapsed="0.000081"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:16.253430" elapsed="0.000304"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:03:16.253414" elapsed="0.000344"/>
</if>
<if>
<branch type="IF" condition="${verify_system_status} and (&quot;${service_list}&quot; != &quot;[[]]&quot;)">
<kw name="Check Status Of Services Is OPERATIONAL" owner="ClusterManagement">
<arg>@{service_list}</arg>
<doc>This keyword will verify whether all the services are operational in all the ODL nodes</doc>
<status status="NOT RUN" start="2026-04-13T03:03:16.254010" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:16.253812" elapsed="0.000259"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:03:16.253796" elapsed="0.000298"/>
</if>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Verifies the specified readiness conditions for the given listed members after startup.
If ${verify_cluster_sync}, verifies the datastores have synced with the rest of the cluster.
If True, verifies RESTCONF is available.
If ${verify_system_status}, verifies the system services are OPERATIONAL.</doc>
<status status="FAIL" start="2026-04-13T03:03:16.228196" elapsed="0.025981">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="Verify_Members_Are_Ready" owner="ClusterManagement">
<if>
<branch type="IF" condition="${verify_cluster_sync}">
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.276490" 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-04-13T03:03:26.275998" elapsed="0.000529"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.277046" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T03:03:26.276709" elapsed="0.000364"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-13T03:03:26.277123" elapsed="0.000044"/>
</return>
<msg time="2026-04-13T03:03:26.277308" 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-04-13T03:03:26.275502" elapsed="0.001840"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.279098" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:26.278735" elapsed="0.000393"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:26.279317" elapsed="0.000046"/>
</return>
<msg time="2026-04-13T03:03:26.279506" 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-04-13T03:03:26.278352" elapsed="0.001186"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.287156" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:26.286804" elapsed="0.000412"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.287689" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:26.287370" 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-04-13T03:03:26.685693" level="INFO">GET Request : url=http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:26.685916" level="INFO">GET Response : url=http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Mon, 13 Apr 2026 03:03:26 GMT', 'Expires': 'Mon, 13 Apr 2026 02:03:26 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore","type":"read"},"value":{"LocalShards":["member-1-shard-default-config"],"SyncStatus":true,"MemberName":"member-1"},"timestamp":1776049406,"status":200} 
 </msg>
<msg time="2026-04-13T03:03:26.686225" 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-04-13T03:03:26.289986" elapsed="0.396306"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:26.287824" elapsed="0.398585"/>
</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-04-13T03:03:26.686908" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:26.686481" elapsed="0.000583"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.287798" elapsed="0.399317"/>
</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-04-13T03:03:26.692807" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore","type":"read"},"value":{"LocalShards":["member-1-shard-default-config"],"SyncStatus":true,"MemberName":"member-1"},"timestamp":1776049406,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:26.689144" elapsed="0.003797"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:26.688789" elapsed="0.004301"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.688758" elapsed="0.004370"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.696995" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:26.693542" elapsed="0.003581"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:26.693212" elapsed="0.004061"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.693188" elapsed="0.004123"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.698373" 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-04-13T03:03:26.697569" elapsed="0.000843"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:26.698913" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:26.698514" elapsed="0.000638"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.700075" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:26.699462" elapsed="0.000693"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:26.699190" elapsed="0.001111"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.698487" elapsed="0.001839"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.701036" 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-04-13T03:03:26.700473" elapsed="0.000591"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:26.701378" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:26.701136" elapsed="0.000415"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.702304" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:26.701739" elapsed="0.000644"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:26.701578" elapsed="0.000953"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.701117" elapsed="0.001438"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:26.702744" elapsed="0.000680"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:26.704551" 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-04-13T03:03:26.703693" elapsed="0.000886"/>
</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-04-13T03:03:26.704743" elapsed="0.002859"/>
</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-04-13T03:03:26.688090" elapsed="0.019602"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:26.707888" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:26.707769" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.707748" elapsed="0.000211"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T03:03:26.710779" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049406,...</msg>
<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="PASS" start="2026-04-13T03:03:26.708094" elapsed="0.002717"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T03:03:26.710867" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T03:03:26.711042" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049406,...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</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-04-13T03:03:26.282281" elapsed="0.428788"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:26.711130" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:03:26.711313" level="INFO">${conf_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049406,...</msg>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-13T03:03:26.279778" elapsed="0.431563"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.712201" level="INFO">{
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049406,
 "value": {
  "LocalShards": [
   "member-1-shard-default-config"
  ],
  "MemberName": "member-1",
  "SyncStatus": true
 }
}
</msg>
<arg>${shard_manager_text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:26.711934" elapsed="0.000316"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.713205" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1776049406, 'value': {...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:26.712787" elapsed="0.000446"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:26.713282" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:26.713443" level="INFO">${manager_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1776049406, 'value': {...</msg>
<var>${manager_object}</var>
<arg>${shard_manager_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:26.712444" elapsed="0.001026"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:26.714060" level="INFO">${value_object} = {'LocalShards': ['member-1-shard-default-config'], 'MemberName': 'member-1', 'SyncStatus': True}</msg>
<var>${value_object}</var>
<arg>dictionary=${manager_object}</arg>
<arg>key=value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:26.713614" elapsed="0.000473"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:26.714456" level="INFO">${sync_status} = True</msg>
<var>${sync_status}</var>
<arg>dictionary=${value_object}</arg>
<arg>key=SyncStatus</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:26.714233" elapsed="0.000249"/>
</kw>
<return>
<value>${sync_status}</value>
<status status="PASS" start="2026-04-13T03:03:26.714531" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:26.714768" level="INFO">${conf_status} = True</msg>
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="PASS" start="2026-04-13T03:03:26.711564" elapsed="0.003231"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-13T03:03:26.714979" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:26.714867" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.714848" elapsed="0.000197"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.722399" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:26.722110" elapsed="0.000344"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.722872" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:26.722597" elapsed="0.000319"/>
</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-04-13T03:03:26.731846" level="INFO">GET Request : url=http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:26.731930" level="INFO">GET Response : url=http://10.30.170.156:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Mon, 13 Apr 2026 03:03:26 GMT', 'Expires': 'Mon, 13 Apr 2026 02:03:26 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore","type":"read"},"value":{"LocalShards":["member-1-shard-default-operational"],"SyncStatus":true,"MemberName":"member-1"},"timestamp":1776049406,"status":200} 
 </msg>
<msg time="2026-04-13T03:03:26.732056" 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-04-13T03:03:26.725114" elapsed="0.006969"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:26.723086" elapsed="0.009044"/>
</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-04-13T03:03:26.732316" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:26.732160" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.723060" elapsed="0.009343"/>
</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-04-13T03:03:26.736234" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore","type":"read"},"value":{"LocalShards":["member-1-shard-default-operational"],"SyncStatus":true,"MemberName":"member-1"},"timestamp":1776049406,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:26.733673" elapsed="0.002656"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:26.733413" elapsed="0.003022"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.733392" elapsed="0.003070"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.739186" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:26.736771" elapsed="0.002546"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:26.736522" elapsed="0.002900"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.736505" elapsed="0.002944"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.740198" 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-04-13T03:03:26.739641" elapsed="0.000584"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:26.740541" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:26.740298" elapsed="0.000435"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.741474" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:26.740909" elapsed="0.000643"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:26.740760" elapsed="0.000956"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.740279" elapsed="0.001462"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.742398" 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-04-13T03:03:26.741885" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:26.742800" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:26.742493" elapsed="0.000478"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.743738" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:26.743143" elapsed="0.000674"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:26.742998" elapsed="0.000962"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.742475" elapsed="0.001509"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:26.744130" elapsed="0.000667"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:26.745772" 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-04-13T03:03:26.744950" elapsed="0.000849"/>
</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-04-13T03:03:26.745940" elapsed="0.003006"/>
</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-04-13T03:03:26.732952" elapsed="0.016064"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:26.749260" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:26.749089" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.749069" elapsed="0.000266"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T03:03:26.752324" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<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="PASS" start="2026-04-13T03:03:26.749468" elapsed="0.002885"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T03:03:26.752406" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T03:03:26.752578" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</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-04-13T03:03:26.717907" elapsed="0.034697"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:26.752678" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:03:26.752831" level="INFO">${oper_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-13T03:03:26.715328" elapsed="0.037530"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.753712" level="INFO">{
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049406,
 "value": {
  "LocalShards": [
   "member-1-shard-default-operational"
  ],
  "MemberName": "member-1",
  "SyncStatus": true
 }
}
</msg>
<arg>${shard_manager_text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:26.753426" elapsed="0.000333"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.754750" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1776049406, ...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:26.754278" elapsed="0.000501"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:26.754829" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:26.754987" level="INFO">${manager_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1776049406, ...</msg>
<var>${manager_object}</var>
<arg>${shard_manager_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:26.753953" elapsed="0.001061"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:26.755399" level="INFO">${value_object} = {'LocalShards': ['member-1-shard-default-operational'], 'MemberName': 'member-1', 'SyncStatus': True}</msg>
<var>${value_object}</var>
<arg>dictionary=${manager_object}</arg>
<arg>key=value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:26.755157" elapsed="0.000268"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:26.755795" level="INFO">${sync_status} = True</msg>
<var>${sync_status}</var>
<arg>dictionary=${value_object}</arg>
<arg>key=SyncStatus</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:26.755569" elapsed="0.000252"/>
</kw>
<return>
<value>${sync_status}</value>
<status status="PASS" start="2026-04-13T03:03:26.755867" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:03:26.756015" level="INFO">${oper_status} = True</msg>
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="PASS" start="2026-04-13T03:03:26.753075" elapsed="0.002964"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="PASS" start="2026-04-13T03:03:26.756083" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T03:03:26.756230" level="INFO">${status} = True</msg>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="PASS" start="2026-04-13T03:03:26.277927" elapsed="0.478328"/>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="PASS" start="2026-04-13T03:03:26.756445" elapsed="0.000032"/>
</continue>
<status status="PASS" start="2026-04-13T03:03:26.756329" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.756310" elapsed="0.000223"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:26.756679" elapsed="0.000022"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-13T03:03:26.277648" elapsed="0.479089"/>
</iter>
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.758167" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:26.757862" elapsed="0.000332"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:26.758240" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:26.758386" 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-04-13T03:03:26.757512" elapsed="0.000898"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.765569" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:26.765296" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:26.766089" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:26.765844" 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-04-13T03:03:27.126380" level="INFO">GET Request : url=http://10.30.170.138:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:27.126600" level="INFO">GET Response : url=http://10.30.170.138:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Mon, 13 Apr 2026 03:03:27 GMT', 'Expires': 'Mon, 13 Apr 2026 02:03:27 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore","type":"read"},"value":{"LocalShards":["member-2-shard-default-config"],"SyncStatus":true,"MemberName":"member-2"},"timestamp":1776049407,"status":200} 
 </msg>
<msg time="2026-04-13T03:03:27.126954" 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-04-13T03:03:26.768175" elapsed="0.358845"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:26.766208" elapsed="0.360933"/>
</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-04-13T03:03:27.127670" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.127210" elapsed="0.000623"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.766186" elapsed="0.361700"/>
</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-04-13T03:03:27.136837" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore","type":"read"},"value":{"LocalShards":["member-2-shard-default-config"],"SyncStatus":true,"MemberName":"member-2"},"timestamp":1776049407,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.130833" elapsed="0.006104"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.130216" elapsed="0.006851"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.130168" elapsed="0.006929"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.139924" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.137397" elapsed="0.002620"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.137161" elapsed="0.002960"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.137142" elapsed="0.003006"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.140898" 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-04-13T03:03:27.140321" elapsed="0.000604"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.141242" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.140997" elapsed="0.000417"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.142173" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:27.141591" elapsed="0.000660"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.141441" elapsed="0.000956"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.140979" elapsed="0.001442"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.143101" 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-04-13T03:03:27.142570" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.143433" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.143198" elapsed="0.000455"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.144387" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:27.143829" elapsed="0.000639"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.143682" elapsed="0.000930"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.143180" elapsed="0.001471"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:27.144796" elapsed="0.000652"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:27.146417" 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-04-13T03:03:27.145599" elapsed="0.000845"/>
</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-04-13T03:03:27.146587" elapsed="0.003074"/>
</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-04-13T03:03:27.129115" elapsed="0.020617"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:27.150028" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:27.149887" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.149860" elapsed="0.000241"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T03:03:27.153026" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049407,...</msg>
<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="PASS" start="2026-04-13T03:03:27.150238" elapsed="0.002820"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T03:03:27.153116" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T03:03:27.153293" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049407,...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</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-04-13T03:03:26.761181" elapsed="0.392138"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:27.153379" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:03:27.153530" level="INFO">${conf_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049407,...</msg>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-13T03:03:26.758603" elapsed="0.394960"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.154444" level="INFO">{
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049407,
 "value": {
  "LocalShards": [
   "member-2-shard-default-config"
  ],
  "MemberName": "member-2",
  "SyncStatus": true
 }
}
</msg>
<arg>${shard_manager_text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.154168" elapsed="0.000326"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.155492" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1776049407, 'value': {...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:27.155043" elapsed="0.000482"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:27.155576" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:27.155756" level="INFO">${manager_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1776049407, 'value': {...</msg>
<var>${manager_object}</var>
<arg>${shard_manager_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:27.154708" elapsed="0.001075"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:27.156154" level="INFO">${value_object} = {'LocalShards': ['member-2-shard-default-config'], 'MemberName': 'member-2', 'SyncStatus': True}</msg>
<var>${value_object}</var>
<arg>dictionary=${manager_object}</arg>
<arg>key=value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:27.155927" elapsed="0.000254"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:27.156535" level="INFO">${sync_status} = True</msg>
<var>${sync_status}</var>
<arg>dictionary=${value_object}</arg>
<arg>key=SyncStatus</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:27.156322" elapsed="0.000239"/>
</kw>
<return>
<value>${sync_status}</value>
<status status="PASS" start="2026-04-13T03:03:27.156607" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T03:03:27.156776" level="INFO">${conf_status} = True</msg>
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="PASS" start="2026-04-13T03:03:27.153808" elapsed="0.002993"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-13T03:03:27.156983" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:27.156872" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.156853" elapsed="0.000196"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.164215" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.163922" elapsed="0.000348"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.164681" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.164412" elapsed="0.000314"/>
</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-04-13T03:03:27.174903" level="INFO">GET Request : url=http://10.30.170.138:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:27.175020" level="INFO">GET Response : url=http://10.30.170.138:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Mon, 13 Apr 2026 03:03:27 GMT', 'Expires': 'Mon, 13 Apr 2026 02:03:27 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore","type":"read"},"value":{"LocalShards":["member-2-shard-default-operational"],"SyncStatus":true,"MemberName":"member-2"},"timestamp":1776049407,"status":200} 
 </msg>
<msg time="2026-04-13T03:03:27.175258" 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-04-13T03:03:27.166982" elapsed="0.008315"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.164803" 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-04-13T03:03:27.175685" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.175400" elapsed="0.000379"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.164779" elapsed="0.011031"/>
</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-04-13T03:03:27.181078" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore","type":"read"},"value":{"LocalShards":["member-2-shard-default-operational"],"SyncStatus":true,"MemberName":"member-2"},"timestamp":1776049407,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.177492" elapsed="0.003718"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.177170" elapsed="0.004187"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.177142" elapsed="0.004253"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.185214" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.181815" elapsed="0.003525"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.181475" elapsed="0.004010"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.181452" elapsed="0.004072"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.186512" 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-04-13T03:03:27.185764" elapsed="0.000785"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.187007" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.186669" elapsed="0.000578"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.188383" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:27.187548" elapsed="0.000954"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.187285" elapsed="0.001441"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.186622" elapsed="0.002129"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.189403" 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-04-13T03:03:27.188894" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.189755" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.189500" elapsed="0.000424"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.190686" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:27.190095" elapsed="0.000695"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.189951" elapsed="0.001000"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.189482" elapsed="0.001498"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:27.191160" elapsed="0.000918"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:27.193071" 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-04-13T03:03:27.192234" elapsed="0.000864"/>
</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-04-13T03:03:27.193237" elapsed="0.002808"/>
</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-04-13T03:03:27.176503" elapsed="0.019610"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:27.196299" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:27.196186" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.196166" elapsed="0.000203"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T03:03:27.199090" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<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="PASS" start="2026-04-13T03:03:27.196499" elapsed="0.002619"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T03:03:27.199170" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T03:03:27.199334" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</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-04-13T03:03:27.159697" elapsed="0.039663"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:27.199502" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T03:03:27.199689" level="INFO">${oper_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-13T03:03:27.157246" elapsed="0.042472"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.200572" level="INFO">{
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049407,
 "value": {
  "LocalShards": [
   "member-2-shard-default-operational"
  ],
  "MemberName": "member-2",
  "SyncStatus": true
 }
}
</msg>
<arg>${shard_manager_text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.200280" elapsed="0.000341"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.201777" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1776049407, ...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:27.201316" elapsed="0.000492"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:27.201857" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:27.202030" level="INFO">${manager_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1776049407, ...</msg>
<var>${manager_object}</var>
<arg>${shard_manager_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:27.200982" elapsed="0.001079"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:27.202438" level="INFO">${value_object} = {'LocalShards': ['member-2-shard-default-operational'], 'MemberName': 'member-2', 'SyncStatus': True}</msg>
<var>${value_object}</var>
<arg>dictionary=${manager_object}</arg>
<arg>key=value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:27.202209" elapsed="0.000255"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:27.202833" level="INFO">${sync_status} = True</msg>
<var>${sync_status}</var>
<arg>dictionary=${value_object}</arg>
<arg>key=SyncStatus</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:27.202604" elapsed="0.000254"/>
</kw>
<return>
<value>${sync_status}</value>
<status status="PASS" start="2026-04-13T03:03:27.202906" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:03:27.203056" level="INFO">${oper_status} = True</msg>
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="PASS" start="2026-04-13T03:03:27.199926" elapsed="0.003155"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="PASS" start="2026-04-13T03:03:27.203123" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:03:27.203272" level="INFO">${status} = True</msg>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="PASS" start="2026-04-13T03:03:26.757139" elapsed="0.446164"/>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="PASS" start="2026-04-13T03:03:27.203540" elapsed="0.000034"/>
</continue>
<status status="PASS" start="2026-04-13T03:03:27.203377" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.203358" elapsed="0.000289"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.203782" elapsed="0.000022"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-13T03:03:26.756894" elapsed="0.446945"/>
</iter>
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.205464" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:27.205156" elapsed="0.000334"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:27.205535" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:27.205704" 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-04-13T03:03:27.204825" elapsed="0.000905"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.212777" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.212498" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.213212" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.212969" 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-04-13T03:03:27.657721" level="INFO">GET Request : url=http://10.30.171.185:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:27.657886" level="INFO">GET Response : url=http://10.30.171.185:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Mon, 13 Apr 2026 03:03:27 GMT', 'Expires': 'Mon, 13 Apr 2026 02:03:27 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore","type":"read"},"value":{"LocalShards":["member-3-shard-default-config"],"SyncStatus":true,"MemberName":"member-3"},"timestamp":1776049407,"status":200} 
 </msg>
<msg time="2026-04-13T03:03:27.658229" 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-04-13T03:03:27.215397" elapsed="0.442881"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.213327" elapsed="0.445034"/>
</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-04-13T03:03:27.658753" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.658409" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.213306" elapsed="0.445601"/>
</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-04-13T03:03:27.665364" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore","type":"read"},"value":{"LocalShards":["member-3-shard-default-config"],"SyncStatus":true,"MemberName":"member-3"},"timestamp":1776049407,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.661054" elapsed="0.004424"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.660664" elapsed="0.004946"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.660592" elapsed="0.005090"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.668846" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.666048" elapsed="0.002925"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.665776" elapsed="0.003323"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.665751" elapsed="0.003381"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.669998" 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-04-13T03:03:27.669335" elapsed="0.000691"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.670433" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.670114" elapsed="0.000599"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.671565" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:27.670950" elapsed="0.000744"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.670755" elapsed="0.001174"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.670088" elapsed="0.001870"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.672702" 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-04-13T03:03:27.672109" elapsed="0.000622"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.673055" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.672809" elapsed="0.000464"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.674376" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:27.673536" elapsed="0.000947"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.673326" elapsed="0.001419"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.672788" elapsed="0.001992"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:27.675018" elapsed="0.001019"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:27.677365" 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-04-13T03:03:27.676254" elapsed="0.001149"/>
</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-04-13T03:03:27.677605" elapsed="0.004743"/>
</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-04-13T03:03:27.659863" elapsed="0.022632"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:27.683071" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:27.682828" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.682600" elapsed="0.000615"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T03:03:27.687617" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049407,...</msg>
<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="PASS" start="2026-04-13T03:03:27.683532" elapsed="0.004146"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T03:03:27.687786" elapsed="0.000057"/>
</return>
<msg time="2026-04-13T03:03:27.688036" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049407,...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</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-04-13T03:03:27.208277" elapsed="0.479796"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:27.688240" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T03:03:27.688446" level="INFO">${conf_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049407,...</msg>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-13T03:03:27.205926" elapsed="0.482548"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.689761" level="INFO">{
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049407,
 "value": {
  "LocalShards": [
   "member-3-shard-default-config"
  ],
  "MemberName": "member-3",
  "SyncStatus": true
 }
}
</msg>
<arg>${shard_manager_text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.689328" elapsed="0.000499"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.691221" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1776049407, 'value': {...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:27.690563" elapsed="0.000694"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:27.691323" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T03:03:27.691543" level="INFO">${manager_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1776049407, 'value': {...</msg>
<var>${manager_object}</var>
<arg>${shard_manager_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:27.690099" elapsed="0.001481"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:27.692121" level="INFO">${value_object} = {'LocalShards': ['member-3-shard-default-config'], 'MemberName': 'member-3', 'SyncStatus': True}</msg>
<var>${value_object}</var>
<arg>dictionary=${manager_object}</arg>
<arg>key=value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:27.691820" elapsed="0.000338"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:27.692660" level="INFO">${sync_status} = True</msg>
<var>${sync_status}</var>
<arg>dictionary=${value_object}</arg>
<arg>key=SyncStatus</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:27.692354" elapsed="0.000343"/>
</kw>
<return>
<value>${sync_status}</value>
<status status="PASS" start="2026-04-13T03:03:27.692756" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T03:03:27.692955" level="INFO">${conf_status} = True</msg>
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="PASS" start="2026-04-13T03:03:27.688824" elapsed="0.004165"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-13T03:03:27.693250" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:27.693095" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.693066" elapsed="0.000280"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.705076" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.704687" elapsed="0.000450"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.705590" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.705324" elapsed="0.000329"/>
</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-04-13T03:03:27.713990" level="INFO">GET Request : url=http://10.30.171.185:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:27.714128" level="INFO">GET Response : url=http://10.30.171.185:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Mon, 13 Apr 2026 03:03:27 GMT', 'Expires': 'Mon, 13 Apr 2026 02:03:27 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore","type":"read"},"value":{"LocalShards":["member-3-shard-default-operational"],"SyncStatus":true,"MemberName":"member-3"},"timestamp":1776049407,"status":200} 
 </msg>
<msg time="2026-04-13T03:03:27.714344" 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-04-13T03:03:27.708013" elapsed="0.006372"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.705767" elapsed="0.008696"/>
</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-04-13T03:03:27.714800" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.714510" elapsed="0.000390"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.705728" elapsed="0.009204"/>
</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-04-13T03:03:27.720448" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore","type":"read"},"value":{"LocalShards":["member-3-shard-default-operational"],"SyncStatus":true,"MemberName":"member-3"},"timestamp":1776049407,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.716812" elapsed="0.003886"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.716430" elapsed="0.004435"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.716399" elapsed="0.004510"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.725118" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.721361" elapsed="0.003895"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.721006" elapsed="0.004411"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.720978" elapsed="0.004482"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.726551" 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-04-13T03:03:27.725743" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.727092" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.726726" elapsed="0.000771"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.728983" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:27.728118" elapsed="0.000984"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.727543" elapsed="0.001784"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.726696" elapsed="0.002669"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.730418" 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-04-13T03:03:27.729595" elapsed="0.000865"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.730970" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.730578" elapsed="0.000716"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.732791" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:27.731597" elapsed="0.001345"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.731351" elapsed="0.001884"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.730548" elapsed="0.002742"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:27.733556" elapsed="0.001109"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:27.736408" 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-04-13T03:03:27.734903" elapsed="0.001549"/>
</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-04-13T03:03:27.736726" elapsed="0.004433"/>
</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-04-13T03:03:27.715725" elapsed="0.025517"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:27.741453" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:27.741328" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.741305" elapsed="0.000220"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T03:03:27.744907" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<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="PASS" start="2026-04-13T03:03:27.741730" elapsed="0.003219"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T03:03:27.745027" elapsed="0.000046"/>
</return>
<msg time="2026-04-13T03:03:27.745260" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</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-04-13T03:03:27.698989" elapsed="0.046310"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:27.745386" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T03:03:27.745568" level="INFO">${oper_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-13T03:03:27.693617" elapsed="0.051979"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.746711" level="INFO">{
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1776049407,
 "value": {
  "LocalShards": [
   "member-3-shard-default-operational"
  ],
  "MemberName": "member-3",
  "SyncStatus": true
 }
}
</msg>
<arg>${shard_manager_text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.746371" elapsed="0.000484"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.748041" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1776049407, ...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:27.747485" elapsed="0.000587"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:27.748124" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:27.748339" level="INFO">${manager_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1776049407, ...</msg>
<var>${manager_object}</var>
<arg>${shard_manager_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:27.747065" elapsed="0.001315"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:27.749064" level="INFO">${value_object} = {'LocalShards': ['member-3-shard-default-operational'], 'MemberName': 'member-3', 'SyncStatus': True}</msg>
<var>${value_object}</var>
<arg>dictionary=${manager_object}</arg>
<arg>key=value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:27.748556" elapsed="0.000537"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:27.749527" level="INFO">${sync_status} = True</msg>
<var>${sync_status}</var>
<arg>dictionary=${value_object}</arg>
<arg>key=SyncStatus</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:27.749280" elapsed="0.000274"/>
</kw>
<return>
<value>${sync_status}</value>
<status status="PASS" start="2026-04-13T03:03:27.749605" elapsed="0.000049"/>
</return>
<msg time="2026-04-13T03:03:27.749786" level="INFO">${oper_status} = True</msg>
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="PASS" start="2026-04-13T03:03:27.745861" elapsed="0.003951"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="PASS" start="2026-04-13T03:03:27.749857" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:03:27.750008" level="INFO">${status} = True</msg>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="PASS" start="2026-04-13T03:03:27.204403" elapsed="0.545631"/>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="PASS" start="2026-04-13T03:03:27.750247" elapsed="0.000045"/>
</continue>
<status status="PASS" start="2026-04-13T03:03:27.750112" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.750092" elapsed="0.000291"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.750533" elapsed="0.000023"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-13T03:03:27.204181" elapsed="0.546410"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-13T03:03:26.277422" elapsed="1.473223"/>
</for>
<arg>${member_index_list}</arg>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="PASS" start="2026-04-13T03:03:26.275073" elapsed="1.475639"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:26.274582" elapsed="1.476163"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:26.274554" elapsed="1.476215"/>
</if>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Verify_Restconf_Is_Available" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.753927" 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-04-13T03:03:27.752755" elapsed="0.001249"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.755127" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T03:03:27.754361" elapsed="0.000827"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-13T03:03:27.755298" elapsed="0.000090"/>
</return>
<msg time="2026-04-13T03:03:27.755729" 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-04-13T03:03:27.751510" elapsed="0.004307"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.758252" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:27.757529" elapsed="0.000784"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:27.758417" elapsed="0.000065"/>
</return>
<msg time="2026-04-13T03:03:27.758787" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-13T03:03:27.756739" elapsed="0.002104"/>
</kw>
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.847145" level="INFO">${file_path_stream} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:27.846141" elapsed="0.001109"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-13T03:03:27.848506" level="FAIL">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-13T03:03:27.848178" elapsed="0.000414">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-13T03:03:27.848878" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-13T03:03:27.847506" elapsed="0.001468"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.850318" level="INFO">${file_path} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:27.849221" elapsed="0.001194"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T03:03:27.850991" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-13T03:03:27.851277" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T03:03:27.850651" elapsed="0.000721"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.852151" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.851586" elapsed="0.000714"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.854090" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.853821" elapsed="0.000315"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.854578" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-13T03:03:27.854282" elapsed="0.000322"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.854968" elapsed="0.000023"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.855164" elapsed="0.000024"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.855326" elapsed="0.000020"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-13T03:03:27.854838" elapsed="0.000545"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-13T03:03:27.854680" elapsed="0.000736"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-13T03:03:27.855467" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T03:03:27.855801" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-13T03:03:27.853202" elapsed="0.002663"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.852439" elapsed="0.003475"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.856270" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.856000" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.852396" elapsed="0.004038"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.857493" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:27.856636" elapsed="0.000954"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-13T03:03:27.857759" elapsed="0.000172"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-13T03:03:27.844976" elapsed="0.013181"/>
</kw>
<msg time="2026-04-13T03:03:27.858216" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:27.795547" elapsed="0.062724"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.870378" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.882226" elapsed="0.000028"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.894017" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.894202" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.894364" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.894785" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.894647" elapsed="0.000324"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:03:27.894611" elapsed="0.000388"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.895129" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.895282" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.895431" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-13T03:03:27.894579" elapsed="0.000904"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-13T03:03:27.894442" elapsed="0.001067"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.895655" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:27.895731" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:27.895885" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-13T03:03:27.791070" elapsed="0.104843"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-13T03:03:27.897310" level="FAIL">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-13T03:03:27.896943" elapsed="0.000437">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-13T03:03:27.897473" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-13T03:03:27.896560" elapsed="0.000937"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.897826" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:27.897573" elapsed="0.000309"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.898472" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:27.898068" elapsed="0.000430"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.897906" elapsed="0.000627"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.897555" elapsed="0.001002"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.900847" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:27.898712" elapsed="0.002162"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-13T03:03:27.900925" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:27.901078" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:27.896226" elapsed="0.004877"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-13T03:03:27.902385" level="FAIL">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-13T03:03:27.902036" elapsed="0.000413">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-13T03:03:27.902580" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-13T03:03:27.901713" elapsed="0.000892"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-13T03:03:27.902833" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-13T03:03:27.902695" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.902675" elapsed="0.000242"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.903050" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:27.903205" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-13T03:03:27.903270" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:27.905307" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:27.901392" elapsed="0.003942"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.906710" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.906446" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:27.907135" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:27.906894" elapsed="0.000284"/>
</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-04-13T03:03:28.381857" level="INFO">GET Request : url=http://10.30.170.156:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:28.386097" level="INFO">GET Response : url=http://10.30.170.156:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01xjweo48509hn13i12e9r1alkq0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Sun, 12-Apr-2026 03:03:28 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cms-encrypted-data-format","cleartext-private-keys","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"ietf-netconf-monitoring_2010-10-04","revision":"2010-10-04","schema":"/rests/modules/ietf-netconf-monitoring?revision=2010-10-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring","conformance-type":"import"},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"network-topology_2013-10-21","revision":"2013-10-21","schema":"/rests/modules/network-topology?revision=2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:network-topology","conformance-type":"import"},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"odl-netconf-device_2025-10-28","revision":"2025-10-28","schema":"/rests/modules/odl-netconf-device?revision=2025-10-28","namespace":"urn:opendaylight:netconf:device","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["ssh-client-keepalives","client-ident-hostbased","client-ident-publickey","client-ident-password"]},{"name":"netconf-keystore_2024-07-08","revision":"2024-07-08","schema":"/rests/modules/netconf-keystore?revision=2024-07-08","namespace":"urn:opendaylight:netconf:keystore","conformance-type":"import"},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"netconf-node-topology_2025-11-03","revision":"2025-11-03","schema":"/rests/modules/netconf-node-topology?revision=2025-11-03","namespace":"urn:opendaylight:netconf-node-topology","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-netconf-client_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-netconf-client?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-client","conformance-type":"import","feature":["ssh-listen","tls-listen","tls-initiate","central-netconf-client-supported","ssh-initiate"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-0... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-13T03:03:28.386729" 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-04-13T03:03:27.909205" elapsed="0.477764"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.907246" elapsed="0.479839"/>
</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-04-13T03:03:28.387522" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:28.387153" elapsed="0.000618"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.907227" elapsed="0.480606"/>
</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-04-13T03:03:28.394827" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cms-encrypted-data-format","cleartext-private-keys","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"ietf-netconf-monitoring_2010-10-04","revision":"2010-10-04","schema":"/rests/modules/ietf-netconf-monitoring?revision=2010-10-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring","conformance-type":"import"},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"network-topology_2013-10-21","revision":"2013-10-21","schema":"/rests/modules/network-topology?revision=2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:network-topology","conformance-type":"import"},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"odl-netconf-device_2025-10-28","revision":"2025-10-28","schema":"/rests/modules/odl-netconf-device?revision=2025-10-28","namespace":"urn:opendaylight:netconf:device","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["ssh-client-keepalives","client-ident-hostbased","client-ident-publickey","client-ident-password"]},{"name":"netconf-keystore_2024-07-08","revision":"2024-07-08","schema":"/rests/modules/netconf-keystore?revision=2024-07-08","namespace":"urn:opendaylight:netconf:keystore","conformance-type":"import"},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"netconf-node-topology_2025-11-03","revision":"2025-11-03","schema":"/rests/modules/netconf-node-topology?revision=2025-11-03","namespace":"urn:opendaylight:netconf-node-topology","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-netconf-client_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-netconf-client?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-client","conformance-type":"import","feature":["ssh-listen","tls-listen","tls-initiate","central-netconf-client-supported","ssh-initiate"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"netconf-node-optional_2022-12-25","revision":"2022-12-25","schema":"/rests/modules/netconf-node-optional?revision=2022-12-25","namespace":"urn:opendaylight:netconf-node-optional","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"data-export-import-internal_2016-09-21","revision":"2016-09-21","schema":"/rests/modules/data-export-import-internal?revision=2016-09-21","namespace":"urn:opendaylight:daexim-internal","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","if-mib","arbitrary-names"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"data-export-import_2016-09-21","revision":"2016-09-21","schema":"/rests/modules/data-export-import?revision=2016-09-21","namespace":"urn:opendaylight:daexim","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:28.390972" elapsed="0.004112"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:28.390401" elapsed="0.004796"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:28.390351" elapsed="0.004874"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.398012" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:28.395520" elapsed="0.002587"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:28.395286" elapsed="0.002931"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:28.395268" elapsed="0.002977"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.399011" 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-04-13T03:03:28.398429" elapsed="0.000610"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.399360" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:28.399114" elapsed="0.000419"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.401172" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:28.399723" elapsed="0.001528"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:28.399559" elapsed="0.001838"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:28.399095" elapsed="0.002326"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.402107" 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-04-13T03:03:28.401568" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.402446" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:28.402206" elapsed="0.000414"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.403412" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:28.402815" elapsed="0.000678"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:28.402663" elapsed="0.000994"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:28.402187" elapsed="0.001496"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:28.403832" elapsed="0.000784"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:28.405715" 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-04-13T03:03:28.404816" elapsed="0.000929"/>
</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-04-13T03:03:28.405936" elapsed="0.002844"/>
</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-04-13T03:03:28.389178" elapsed="0.019677"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:28.409047" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:28.408930" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:28.408911" elapsed="0.000206"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T03:03:28.420089" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<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="PASS" start="2026-04-13T03:03:28.409248" elapsed="0.010872"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T03:03:28.420200" elapsed="0.000038"/>
</return>
<msg time="2026-04-13T03:03:28.420375" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</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-04-13T03:03:27.905651" elapsed="0.514752"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:28.420468" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:03:28.420621" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-13T03:03:27.769504" elapsed="0.651159"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.421142" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:28.420749" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:28.420730" elapsed="0.000570"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:28.421335" elapsed="0.000026"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-13T03:03:27.763741" elapsed="0.657721"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-13T03:03:27.756302" elapsed="0.665203"/>
</iter>
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.422526" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:28.422217" elapsed="0.000337"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:28.422600" elapsed="0.000049"/>
</return>
<msg time="2026-04-13T03:03:28.422774" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-13T03:03:28.421867" elapsed="0.000932"/>
</kw>
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.513330" level="INFO">${file_path_stream} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:28.512517" elapsed="0.000916"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-13T03:03:28.514586" level="FAIL">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-13T03:03:28.514325" elapsed="0.000379">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-13T03:03:28.514894" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-13T03:03:28.513703" elapsed="0.001285"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.516326" level="INFO">${file_path} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:28.515231" elapsed="0.001194"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T03:03:28.517001" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-13T03:03:28.517287" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T03:03:28.516663" elapsed="0.000719"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.518139" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:28.517600" elapsed="0.000678"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.520122" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:28.519858" elapsed="0.000309"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.520847" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-13T03:03:28.520327" elapsed="0.000546"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.521191" elapsed="0.000022"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.521381" elapsed="0.000024"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.521543" elapsed="0.000027"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-13T03:03:28.521072" elapsed="0.000534"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-13T03:03:28.520929" elapsed="0.000724"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-13T03:03:28.521702" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:03:28.522014" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-13T03:03:28.519359" elapsed="0.002688"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:28.518396" elapsed="0.003696"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.522443" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:28.522177" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:28.518359" elapsed="0.004248"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.523864" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:28.522996" elapsed="0.000965"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-13T03:03:28.524037" elapsed="0.000030"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-13T03:03:28.511209" elapsed="0.013115"/>
</kw>
<msg time="2026-04-13T03:03:28.524381" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:28.460814" elapsed="0.063619"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.536519" elapsed="0.000032"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.548342" elapsed="0.000042"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.561471" elapsed="0.000043"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.561729" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.561919" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.562378" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:28.562239" elapsed="0.000328"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:03:28.562220" elapsed="0.000378"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.562754" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.562909" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.563058" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-13T03:03:28.562177" elapsed="0.000934"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-13T03:03:28.562006" elapsed="0.001133"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.563270" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:28.563349" elapsed="0.000018"/>
</return>
<msg time="2026-04-13T03:03:28.563504" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-13T03:03:28.456602" elapsed="0.106929"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-13T03:03:28.565173" level="FAIL">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-13T03:03:28.564692" elapsed="0.000557">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-13T03:03:28.565345" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-13T03:03:28.564293" elapsed="0.001078"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.565707" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:28.565442" elapsed="0.000323"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.566354" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:28.565949" elapsed="0.000434"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:28.565789" elapsed="0.000629"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:28.565423" elapsed="0.001017"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.568773" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:28.566576" elapsed="0.002225"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-13T03:03:28.568852" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:28.569008" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:28.563873" elapsed="0.005161"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-13T03:03:28.570309" level="FAIL">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-13T03:03:28.569971" elapsed="0.000402">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-13T03:03:28.570467" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-13T03:03:28.569644" elapsed="0.000847"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-13T03:03:28.570713" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-13T03:03:28.570562" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:28.570543" elapsed="0.000252"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.570925" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:28.571079" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-13T03:03:28.571143" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:28.573203" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:28.569321" elapsed="0.003908"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.574612" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:28.574351" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:28.575054" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:28.574813" elapsed="0.000283"/>
</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-04-13T03:03:29.122747" level="INFO">GET Request : url=http://10.30.170.138:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:29.123243" level="INFO">GET Response : url=http://10.30.170.138:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node0plkh2qc9f5fk1a6z0mfrlkseq0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Sun, 12-Apr-2026 03:03:29 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cms-encrypted-data-format","cleartext-private-keys","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"ietf-netconf-monitoring_2010-10-04","revision":"2010-10-04","schema":"/rests/modules/ietf-netconf-monitoring?revision=2010-10-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring","conformance-type":"import"},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"network-topology_2013-10-21","revision":"2013-10-21","schema":"/rests/modules/network-topology?revision=2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:network-topology","conformance-type":"import"},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"odl-netconf-device_2025-10-28","revision":"2025-10-28","schema":"/rests/modules/odl-netconf-device?revision=2025-10-28","namespace":"urn:opendaylight:netconf:device","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["ssh-client-keepalives","client-ident-hostbased","client-ident-publickey","client-ident-password"]},{"name":"netconf-keystore_2024-07-08","revision":"2024-07-08","schema":"/rests/modules/netconf-keystore?revision=2024-07-08","namespace":"urn:opendaylight:netconf:keystore","conformance-type":"import"},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"netconf-node-topology_2025-11-03","revision":"2025-11-03","schema":"/rests/modules/netconf-node-topology?revision=2025-11-03","namespace":"urn:opendaylight:netconf-node-topology","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-netconf-client_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-netconf-client?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-client","conformance-type":"import","feature":["ssh-listen","tls-listen","tls-initiate","central-netconf-client-supported","ssh-initiate"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-0... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-13T03:03:29.123560" 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-04-13T03:03:28.577132" elapsed="0.546460"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:28.575162" elapsed="0.548529"/>
</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-04-13T03:03:29.123939" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:29.123728" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:28.575144" elapsed="0.548885"/>
</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-04-13T03:03:29.128354" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cms-encrypted-data-format","cleartext-private-keys","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"ietf-netconf-monitoring_2010-10-04","revision":"2010-10-04","schema":"/rests/modules/ietf-netconf-monitoring?revision=2010-10-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring","conformance-type":"import"},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"network-topology_2013-10-21","revision":"2013-10-21","schema":"/rests/modules/network-topology?revision=2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:network-topology","conformance-type":"import"},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"odl-netconf-device_2025-10-28","revision":"2025-10-28","schema":"/rests/modules/odl-netconf-device?revision=2025-10-28","namespace":"urn:opendaylight:netconf:device","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["ssh-client-keepalives","client-ident-hostbased","client-ident-publickey","client-ident-password"]},{"name":"netconf-keystore_2024-07-08","revision":"2024-07-08","schema":"/rests/modules/netconf-keystore?revision=2024-07-08","namespace":"urn:opendaylight:netconf:keystore","conformance-type":"import"},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"netconf-node-topology_2025-11-03","revision":"2025-11-03","schema":"/rests/modules/netconf-node-topology?revision=2025-11-03","namespace":"urn:opendaylight:netconf-node-topology","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-netconf-client_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-netconf-client?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-client","conformance-type":"import","feature":["ssh-listen","tls-listen","tls-initiate","central-netconf-client-supported","ssh-initiate"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"netconf-node-optional_2022-12-25","revision":"2022-12-25","schema":"/rests/modules/netconf-node-optional?revision=2022-12-25","namespace":"urn:opendaylight:netconf-node-optional","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"data-export-import-internal_2016-09-21","revision":"2016-09-21","schema":"/rests/modules/data-export-import-internal?revision=2016-09-21","namespace":"urn:opendaylight:daexim-internal","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","if-mib","arbitrary-names"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"data-export-import_2016-09-21","revision":"2016-09-21","schema":"/rests/modules/data-export-import?revision=2016-09-21","namespace":"urn:opendaylight:daexim","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:29.125395" elapsed="0.003263"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:29.125141" elapsed="0.003629"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.125118" elapsed="0.003681"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.131760" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:29.129106" elapsed="0.002751"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:29.128863" elapsed="0.003102"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.128845" elapsed="0.003148"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.132855" 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-04-13T03:03:29.132179" elapsed="0.000706"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.133214" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:29.132963" elapsed="0.000428"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.134171" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:29.133572" elapsed="0.000681"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:29.133419" elapsed="0.000982"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.132942" elapsed="0.001484"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.135115" 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-04-13T03:03:29.134574" elapsed="0.000568"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.135454" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:29.135215" elapsed="0.000461"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.136425" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:29.135858" elapsed="0.000646"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:29.135709" elapsed="0.000981"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.135196" elapsed="0.001519"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:29.136864" elapsed="0.000664"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:29.138506" 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-04-13T03:03:29.137702" elapsed="0.000831"/>
</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-04-13T03:03:29.138692" elapsed="0.003038"/>
</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-04-13T03:03:29.124642" elapsed="0.017163"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:29.142022" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:29.141884" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.141861" elapsed="0.000234"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T03:03:29.153419" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<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="PASS" start="2026-04-13T03:03:29.142250" elapsed="0.011201"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T03:03:29.153509" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T03:03:29.153816" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</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-04-13T03:03:28.573522" elapsed="0.580321"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:29.153909" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:29.154066" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-13T03:03:28.433483" elapsed="0.720610"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.154440" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:29.154182" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.154162" elapsed="0.000448"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:29.154663" elapsed="0.000027"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-13T03:03:28.426518" elapsed="0.728272"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-13T03:03:28.421606" elapsed="0.733227"/>
</iter>
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.155811" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:29.155461" elapsed="0.000378"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:29.155885" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:29.156036" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-13T03:03:29.155099" elapsed="0.000962"/>
</kw>
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.242813" level="INFO">${file_path_stream} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:29.242000" elapsed="0.000917"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-13T03:03:29.244085" level="FAIL">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-13T03:03:29.243806" elapsed="0.000353">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-13T03:03:29.244348" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-13T03:03:29.243171" elapsed="0.001274"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.245575" level="INFO">${file_path} = /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:29.244739" elapsed="0.000984"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T03:03:29.246283" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-13T03:03:29.246569" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T03:03:29.245943" elapsed="0.000774"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.247459" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:29.246931" elapsed="0.000671"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.249931" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:29.249546" elapsed="0.000431"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.250401" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-13T03:03:29.250126" elapsed="0.000302"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.250766" elapsed="0.000022"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.250961" elapsed="0.000025"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.251125" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-13T03:03:29.250641" elapsed="0.000542"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-13T03:03:29.250483" elapsed="0.000730"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-13T03:03:29.251259" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:03:29.251575" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-13T03:03:29.248801" elapsed="0.002807"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:29.248001" elapsed="0.003668"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.252028" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:29.251756" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.247961" elapsed="0.004234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.253348" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:29.252446" elapsed="0.001000"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-13T03:03:29.253521" elapsed="0.000029"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-13T03:03:29.240499" elapsed="0.013449"/>
</kw>
<msg time="2026-04-13T03:03:29.254020" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:29.191655" elapsed="0.062432"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.266064" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.277698" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.289420" elapsed="0.000032"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.289642" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.289810" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.290237" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:29.290102" elapsed="0.000324"/>
</branch>
<status status="NOT RUN" start="2026-04-13T03:03:29.290085" elapsed="0.000369"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.290584" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.290764" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.290915" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-13T03:03:29.290049" elapsed="0.000920"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-13T03:03:29.289893" elapsed="0.001103"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.291126" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:29.291204" elapsed="0.000017"/>
</return>
<msg time="2026-04-13T03:03:29.291348" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-13T03:03:29.187458" elapsed="0.103918"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-13T03:03:29.292935" level="FAIL">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-13T03:03:29.292497" elapsed="0.000514">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-13T03:03:29.293112" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-13T03:03:29.292125" elapsed="0.001012"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.293458" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:29.293209" elapsed="0.000306"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.294121" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:29.293716" elapsed="0.000431"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:29.293540" elapsed="0.000644"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.293190" elapsed="0.001015"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.296721" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:29.294340" elapsed="0.002409"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-13T03:03:29.296803" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:03:29.296964" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:29.291727" elapsed="0.005262"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-13T03:03:29.298314" level="FAIL">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-13T03:03:29.297951" elapsed="0.000433">File '/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-13T03:03:29.298477" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-13T03:03:29.297608" elapsed="0.000894"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-13T03:03:29.298729" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-13T03:03:29.298574" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.298555" elapsed="0.000257"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.298945" elapsed="0.000021"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.299098" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-13T03:03:29.299164" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T03:03:29.301105" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:29.297289" elapsed="0.003843"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.302572" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:29.302297" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.303028" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:29.302778" elapsed="0.000295"/>
</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-04-13T03:03:29.807104" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:29.808287" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Sun, 12-Apr-2026 03:03:29 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cms-encrypted-data-format","cleartext-private-keys","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"ietf-netconf-monitoring_2010-10-04","revision":"2010-10-04","schema":"/rests/modules/ietf-netconf-monitoring?revision=2010-10-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring","conformance-type":"import"},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"network-topology_2013-10-21","revision":"2013-10-21","schema":"/rests/modules/network-topology?revision=2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:network-topology","conformance-type":"import"},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"odl-netconf-device_2025-10-28","revision":"2025-10-28","schema":"/rests/modules/odl-netconf-device?revision=2025-10-28","namespace":"urn:opendaylight:netconf:device","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["ssh-client-keepalives","client-ident-hostbased","client-ident-publickey","client-ident-password"]},{"name":"netconf-keystore_2024-07-08","revision":"2024-07-08","schema":"/rests/modules/netconf-keystore?revision=2024-07-08","namespace":"urn:opendaylight:netconf:keystore","conformance-type":"import"},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"netconf-node-topology_2025-11-03","revision":"2025-11-03","schema":"/rests/modules/netconf-node-topology?revision=2025-11-03","namespace":"urn:opendaylight:netconf-node-topology","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-netconf-client_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-netconf-client?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-client","conformance-type":"import","feature":["ssh-listen","tls-listen","tls-initiate","central-netconf-client-supported","ssh-initiate"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-0... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-13T03:03:29.809124" 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-04-13T03:03:29.305199" elapsed="0.504002"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:29.303144" elapsed="0.506179"/>
</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-04-13T03:03:29.809838" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:29.809394" elapsed="0.000608"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.303124" elapsed="0.506931"/>
</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-04-13T03:03:29.818928" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cms-encrypted-data-format","cleartext-private-keys","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"ietf-netconf-monitoring_2010-10-04","revision":"2010-10-04","schema":"/rests/modules/ietf-netconf-monitoring?revision=2010-10-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring","conformance-type":"import"},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"network-topology_2013-10-21","revision":"2013-10-21","schema":"/rests/modules/network-topology?revision=2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:network-topology","conformance-type":"import"},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"odl-netconf-device_2025-10-28","revision":"2025-10-28","schema":"/rests/modules/odl-netconf-device?revision=2025-10-28","namespace":"urn:opendaylight:netconf:device","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["ssh-client-keepalives","client-ident-hostbased","client-ident-publickey","client-ident-password"]},{"name":"netconf-keystore_2024-07-08","revision":"2024-07-08","schema":"/rests/modules/netconf-keystore?revision=2024-07-08","namespace":"urn:opendaylight:netconf:keystore","conformance-type":"import"},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"netconf-node-topology_2025-11-03","revision":"2025-11-03","schema":"/rests/modules/netconf-node-topology?revision=2025-11-03","namespace":"urn:opendaylight:netconf-node-topology","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-netconf-client_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-netconf-client?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-client","conformance-type":"import","feature":["ssh-listen","tls-listen","tls-initiate","central-netconf-client-supported","ssh-initiate"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"netconf-node-optional_2022-12-25","revision":"2022-12-25","schema":"/rests/modules/netconf-node-optional?revision=2022-12-25","namespace":"urn:opendaylight:netconf-node-optional","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"data-export-import-internal_2016-09-21","revision":"2016-09-21","schema":"/rests/modules/data-export-import-internal?revision=2016-09-21","namespace":"urn:opendaylight:daexim-internal","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","if-mib","arbitrary-names"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"data-export-import_2016-09-21","revision":"2016-09-21","schema":"/rests/modules/data-export-import?revision=2016-09-21","namespace":"urn:opendaylight:daexim","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:29.813386" elapsed="0.005804"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:29.812668" elapsed="0.006630"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.812573" elapsed="0.006753"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.822080" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:29.819615" elapsed="0.002558"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:29.819385" elapsed="0.002896"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.819367" elapsed="0.002941"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.823050" 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-04-13T03:03:29.822472" elapsed="0.000606"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.823391" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:29.823150" elapsed="0.000411"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.824318" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:29.823755" elapsed="0.000641"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:29.823588" elapsed="0.000955"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.823131" elapsed="0.001436"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.825260" 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-04-13T03:03:29.824726" elapsed="0.000561"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.825597" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:29.825359" elapsed="0.000425"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.826516" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:29.825957" elapsed="0.000639"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:29.825811" elapsed="0.000959"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.825341" elapsed="0.001453"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:29.826936" elapsed="0.000648"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:29.828550" 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-04-13T03:03:29.827753" elapsed="0.000824"/>
</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-04-13T03:03:29.828734" elapsed="0.002780"/>
</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-04-13T03:03:29.811409" elapsed="0.020172"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:29.831782" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:29.831670" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.831649" elapsed="0.000202"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T03:03:29.842519" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<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="PASS" start="2026-04-13T03:03:29.831980" elapsed="0.010575"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T03:03:29.842623" elapsed="0.000105"/>
</return>
<msg time="2026-04-13T03:03:29.842877" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</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-04-13T03:03:29.301443" elapsed="0.541461"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:29.842971" elapsed="0.000026"/>
</return>
<msg time="2026-04-13T03:03:29.843124" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-13T03:03:29.166179" elapsed="0.676971"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.843517" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:29.843243" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.843224" elapsed="0.000481"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:29.843740" elapsed="0.000026"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-13T03:03:29.160033" elapsed="0.683832"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-13T03:03:29.154938" elapsed="0.688969"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-13T03:03:27.755962" elapsed="2.087980"/>
</for>
<arg>${member_index_list}</arg>
<status status="PASS" start="2026-04-13T03:03:27.751095" elapsed="2.092906"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:27.750826" elapsed="2.093205"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:27.750810" elapsed="2.093246"/>
</if>
<if>
<branch type="IF" condition="${verify_system_status} and (&quot;${service_list}&quot; != &quot;[[]]&quot;)">
<kw name="Check Status Of Services Is OPERATIONAL" owner="ClusterManagement">
<arg>@{service_list}</arg>
<doc>This keyword will verify whether all the services are operational in all the ODL nodes</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.844443" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:29.844112" elapsed="0.000390"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.844096" elapsed="0.000430"/>
</if>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Verifies the specified readiness conditions for the given listed members after startup.
If ${verify_cluster_sync}, verifies the datastores have synced with the rest of the cluster.
If True, verifies RESTCONF is available.
If ${verify_system_status}, verifies the system services are OPERATIONAL.</doc>
<status status="PASS" start="2026-04-13T03:03:26.273950" elapsed="3.570626"/>
</kw>
<arg>${timeout}</arg>
<arg>10s</arg>
<arg>Verify_Members_Are_Ready</arg>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-13T03:02:56.073693" elapsed="33.770965"/>
</kw>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement" type="TEARDOWN">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.848148" 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-04-13T03:03:29.847727" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.848698" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-13T03:03:29.848334" elapsed="0.000390"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-13T03:03:29.848771" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:29.848940" 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-04-13T03:03:29.847309" elapsed="0.001656"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:29.850022" level="INFO">${member_ip} = 10.30.170.156</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:29.849752" elapsed="0.000296"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:03:29.851064" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:03:29.851165" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:03:29.850899" elapsed="0.000292"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:29.855256" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:29.854988" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:29.854966" elapsed="0.000373"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:03:29.855607" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:03:29.855731" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:03:29.855472" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.856381" level="INFO">Attempting to execute command "netstat -pnatu | grep 2550" on remote system "10.30.170.156" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:29.855894" elapsed="0.000534"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:03:29.857215" level="INFO">${conn_id} = 590</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:03:29.856572" elapsed="0.000670"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:03:29.858353" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:03:29.858453" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:03:29.857957" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:29.858622" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:03:29.860491" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:03:30.228132" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:53 UTC 2026

  System load:  0.01               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:55 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T03:03:29.859873" elapsed="0.368529"/>
</kw>
<msg time="2026-04-13T03:03:30.228569" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:29.859328" elapsed="0.369459"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:03:29.857446" elapsed="0.371495"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:03:30.229691" level="INFO">Executing command 'netstat -pnatu | grep 2550'.</msg>
<msg time="2026-04-13T03:03:30.242503" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T03:03:30.242722" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T03:03:30.242771" level="INFO">${stderr} = bash: line 1: netstat: command not found</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T03:03:30.229280" elapsed="0.013518"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:03:30.243025" elapsed="0.000276"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:30.243878" level="INFO">bash: line 1: netstat: command not found</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:30.243491" elapsed="0.000434"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:03:30.244162" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:30.244012" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:30.243986" elapsed="0.000249"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:03:30.244397" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-13T03:03:30.244290" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:30.244274" elapsed="0.000216"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:03:30.244525" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:30.247648" 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-04-13T03:03:30.248379" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:03:30.248697" elapsed="0.000101"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:03:30.244862" elapsed="0.003989"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:03:29.854418" elapsed="0.394525"/>
</kw>
<msg time="2026-04-13T03:03:30.248999" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:29.853882" elapsed="0.395185"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:03:29.851830" elapsed="0.397334"/>
</kw>
<msg time="2026-04-13T03:03:30.249206" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:29.851336" elapsed="0.397927"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:30.251981" 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-04-13T03:03:30.252443" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:03:30.252738" 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-04-13T03:03:30.249545" elapsed="0.003344"/>
</kw>
<msg time="2026-04-13T03:03:30.252982" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:03:29.850249" elapsed="0.402757"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:30.253560" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:30.253302" elapsed="0.000299"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:30.253664" 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-04-13T03:03:29.849321" elapsed="0.404475"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-13T03:03:29.849157" elapsed="0.404677"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:30.254814" level="INFO">${member_ip} = 10.30.170.138</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:30.254522" elapsed="0.000319"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:03:30.255600" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:03:30.255717" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:03:30.255463" elapsed="0.000280"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:30.258356" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:30.258085" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:30.258063" elapsed="0.000375"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:03:30.258738" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:03:30.258840" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:03:30.258572" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:30.259470" level="INFO">Attempting to execute command "netstat -pnatu | grep 2550" on remote system "10.30.170.138" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:30.259004" elapsed="0.000512"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:03:30.260092" level="INFO">${conn_id} = 593</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:03:30.259680" elapsed="0.000438"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:03:30.261218" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:03:30.261316" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:03:30.260779" elapsed="0.000561"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:30.261483" elapsed="0.000738"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:03:30.263600" level="INFO">Logging into '10.30.170.138:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:03:30.590861" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:53 UTC 2026

  System load:  0.01               Processes:             122
  Usage of /:   11.2% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.170.138
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:55 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:03:30.262971" elapsed="0.328269"/>
</kw>
<msg time="2026-04-13T03:03:30.591679" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:30.262387" elapsed="0.329568"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:03:30.260317" elapsed="0.331855"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:03:30.593131" level="INFO">Executing command 'netstat -pnatu | grep 2550'.</msg>
<msg time="2026-04-13T03:03:30.606292" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T03:03:30.606549" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T03:03:30.606689" level="INFO">${stderr} = bash: line 1: netstat: command not found</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T03:03:30.592586" elapsed="0.014160"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:03:30.607100" elapsed="0.000489"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:30.608724" level="INFO">bash: line 1: netstat: command not found</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:30.608003" elapsed="0.000831"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:03:30.609360" elapsed="0.000050"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:30.609009" elapsed="0.000496"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:30.608958" elapsed="0.000605"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:03:30.609851" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-13T03:03:30.609691" elapsed="0.000248"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:30.609667" elapsed="0.000306"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:03:30.610021" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:30.613896" elapsed="0.000796"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:03:30.614907" elapsed="0.000223"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:03:30.615315" elapsed="0.000138"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:03:30.610462" elapsed="0.005064"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:03:30.257464" elapsed="0.358212"/>
</kw>
<msg time="2026-04-13T03:03:30.615754" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:30.256908" elapsed="0.358937"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:03:30.256352" elapsed="0.359602"/>
</kw>
<msg time="2026-04-13T03:03:30.616011" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:30.255882" elapsed="0.360209"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:30.619751" elapsed="0.000437"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:03:30.620395" elapsed="0.000200"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:03:30.620802" elapsed="0.000134"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:03:30.616475" elapsed="0.004532"/>
</kw>
<msg time="2026-04-13T03:03:30.621135" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:03:30.255043" elapsed="0.366127"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:30.621797" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:30.621473" elapsed="0.000366"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:30.621882" elapsed="0.000028"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:03:30.254101" elapsed="0.367906"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-13T03:03:30.253932" elapsed="0.368112"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:30.623038" level="INFO">${member_ip} = 10.30.171.185</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:30.622766" elapsed="0.000299"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:03:30.623929" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:03:30.624032" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:03:30.623789" elapsed="0.000270"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:30.626910" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:30.626648" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:30.626613" elapsed="0.000377"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:03:30.627250" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-13T03:03:30.627350" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-13T03:03:30.627122" elapsed="0.000255"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:30.627992" level="INFO">Attempting to execute command "netstat -pnatu | grep 2550" on remote system "10.30.171.185" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:30.627512" elapsed="0.000527"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:03:30.628594" level="INFO">${conn_id} = 596</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:03:30.628181" elapsed="0.000439"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:03:30.629718" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:03:30.629813" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:03:30.629289" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:30.629981" elapsed="0.000521"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:03:30.631839" level="INFO">Logging into '10.30.171.185:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:03:31.219800" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:03:30 UTC 2026

  System load:  0.56               Processes:             127
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.185
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:02:55 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-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-04-13T03:03:30.631202" elapsed="0.588821"/>
</kw>
<msg time="2026-04-13T03:03:31.220148" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:30.630674" elapsed="0.589618"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:03:30.628849" elapsed="0.591563"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-13T03:03:31.220959" level="INFO">Executing command 'netstat -pnatu | grep 2550'.</msg>
<msg time="2026-04-13T03:03:31.233409" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-13T03:03:31.233575" level="INFO">${stdout} = </msg>
<msg time="2026-04-13T03:03:31.233705" level="INFO">${stderr} = bash: line 1: netstat: command not found</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-13T03:03:31.220674" elapsed="0.013068"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:03:31.233964" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.235016" level="INFO">bash: line 1: netstat: command not found</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:31.234538" elapsed="0.000542"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:03:31.235404" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:31.235201" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:31.235166" elapsed="0.000342"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-13T03:03:31.235771" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-13T03:03:31.235582" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:31.235560" elapsed="0.000408"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-13T03:03:31.236021" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:31.240212" elapsed="0.000814"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:03:31.241241" elapsed="0.000223"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:03:31.241688" elapsed="0.000139"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:03:31.236455" elapsed="0.005446"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-13T03:03:30.626074" elapsed="0.615955"/>
</kw>
<msg time="2026-04-13T03:03:31.242106" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:30.625507" elapsed="0.616689"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-13T03:03:30.624941" elapsed="0.617362"/>
</kw>
<msg time="2026-04-13T03:03:31.242360" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:30.624200" elapsed="0.618240"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:31.246152" elapsed="0.000439"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:03:31.246781" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:03:31.247061" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-13T03:03:31.242850" elapsed="0.004358"/>
</kw>
<msg time="2026-04-13T03:03:31.247301" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-13T03:03:30.623342" elapsed="0.623985"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.247757" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:31.247491" elapsed="0.000308"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:31.247841" elapsed="0.000029"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-13T03:03:30.622311" elapsed="0.625654"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-13T03:03:30.622143" elapsed="0.625861"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-13T03:03:29.849024" elapsed="1.399017"/>
</for>
<arg>command=netstat -pnatu | grep 2550</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-13T03:03:29.844962" elapsed="1.403138"/>
</kw>
<doc>If the list is empty, start all cluster members. Otherwise, start members based on present indices.
If ${wait_for_sync}, wait for cluster sync on listed members.
Optionally karaf_home can be overriden. Optionally specific JAVA_HOME is used for starting.
Garbage collection is unconditionally logged to files. TODO: Make that reasonable conditional?</doc>
<status status="PASS" start="2026-04-13T03:02:54.881426" elapsed="36.366725"/>
</kw>
<kw name="Copy Config Data To Controller" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.249090" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-13T03:03:31.248704" elapsed="0.000423"/>
</kw>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:31.249968" level="INFO">${ip_address} = 10.30.170.156</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:31.249693" elapsed="0.000301"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-13T03:03:31.250041" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:31.250188" level="INFO">${host} = 10.30.170.156</msg>
<var>${host}</var>
<arg>${host_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-13T03:03:31.249341" elapsed="0.000871"/>
</kw>
<kw name="Return ConnnectionID" owner="DaeximKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-13T03:03:31.251260" level="INFO">${conn_id} = 599</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-13T03:03:31.250890" elapsed="0.000396"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.252152" level="INFO">Length is 0.</msg>
<msg time="2026-04-13T03:03:31.252227" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-13T03:03:31.251870" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:31.252391" elapsed="0.000385"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-13T03:03:31.253594" level="INFO">Logging into '10.30.170.156:22' as 'jenkins'.</msg>
<msg time="2026-04-13T03:03:31.568327" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Apr 13 03:02:53 UTC 2026

  System load:  0.01               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.170.156
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Apr 13 03:03:30 2026 from 10.30.170.67
[?2004h[jenkins@releng-23298-180-0-builder-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-13T03:03:31.253281" elapsed="0.315225"/>
</kw>
<msg time="2026-04-13T03:03:31.568599" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:31.252933" elapsed="0.315773"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-13T03:03:31.251482" elapsed="0.317346"/>
</kw>
<return>
<value>${conn_id}</value>
<status status="PASS" start="2026-04-13T03:03:31.568893" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T03:03:31.569112" level="INFO">${connections} = 599</msg>
<var>${connections}</var>
<arg>${host}</arg>
<doc>Returns the connection of any host. Defaults to controller</doc>
<status status="PASS" start="2026-04-13T03:03:31.250387" elapsed="0.318751"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connections}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-13T03:03:31.569349" elapsed="0.000249"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:31.587822" elapsed="0.000551"/>
</kw>
<msg time="2026-04-13T03:03:31.588430" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:31.587438" elapsed="0.001046"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return ../variables/daexim/scandium/daexim if vanadium is at least ${lower_bound},
return ../variables/daexim/calcium/daexim otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:31.587048" elapsed="0.001512"/>
</kw>
<msg time="2026-04-13T03:03:31.588604" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:31.578317" elapsed="0.010348"/>
</kw>
<msg time="2026-04-13T03:03:31.588775" level="INFO">${dictionary} = ../variables/daexim/scandium/daexim</msg>
<var>${dictionary}</var>
<arg>${DAEXIM_DATA_DIRECTORY_SCANDIUM}</arg>
<arg>${DAEXIM_DATA_DIRECTORY_CALCIUM}</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:31.577874" elapsed="0.010926"/>
</kw>
<kw name="Put Directory" owner="SSHLibrary">
<msg time="2026-04-13T03:03:31.600396" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-04-13T03:03:31.627161" level="INFO">'/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/daexim/scandium/daexim/odl_backup_operational.json' -&gt; '/tmp/karaf-0.24.0/daexim/odl_backup_operational.json'</msg>
<msg time="2026-04-13T03:03:31.627231" level="INFO">'/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/daexim/scandium/daexim/odl_backup_models.json' -&gt; '/tmp/karaf-0.24.0/daexim/odl_backup_models.json'</msg>
<msg time="2026-04-13T03:03:31.627271" level="INFO">'/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/../variables/daexim/scandium/daexim/odl_backup_config.json' -&gt; '/tmp/karaf-0.24.0/daexim/odl_backup_config.json'</msg>
<arg>/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/${dictionary}</arg>
<arg>${WORKSPACE}/${BUNDLEFOLDER}/</arg>
<arg>mode=664</arg>
<doc>Uploads a directory, including its content, from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-13T03:03:31.588948" elapsed="0.038401"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-13T03:03:31.627621" elapsed="0.000413"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>This keyword copies the daexim folder under variables folder to the Controller</doc>
<status status="PASS" start="2026-04-13T03:03:31.248373" elapsed="0.379750"/>
</kw>
<kw name="Schedule Import" owner="DaeximKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.632364" level="INFO">${modelflag} = false</msg>
<var>${modelflag}</var>
<arg>${mdlflag}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:31.631903" elapsed="0.000501"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.633049" level="INFO">${storeflag} = data</msg>
<var>${storeflag}</var>
<arg>${strflag}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:31.632612" elapsed="0.000475"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-13T03:03:31.633513" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/import.json"&gt;/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/variables/daexim/import.json&lt;/a&gt;'.</msg>
<msg time="2026-04-13T03:03:31.633726" level="INFO">${json} = {
  "input" : {
    "check-models" : "${modelflag}",
    "clear-stores" : "${storeflag}"
  }
}
</msg>
<var>${json}</var>
<arg>/w/workspace/daexim-csit-3node-clustering-basic-only-vanadium/test/csit/libraries/${IMPORT_PAYLOAD}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-13T03:03:31.633293" elapsed="0.000472"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.634591" level="INFO">${json} = {
  "input" : {
    "check-models" : "false",
    "clear-stores" : "data"
  }
}
</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-13T03:03:31.634065" elapsed="0.000585"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.635220" level="INFO">{
  "input" : {
    "check-models" : "false",
    "clear-stores" : "data"
  }
}
</msg>
<arg>${json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:31.634862" elapsed="0.000424"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.642234" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:31.641935" elapsed="0.000327"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:31.642313" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T03:03:31.642481" 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-04-13T03:03:31.641575" elapsed="0.000930"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.660418" level="INFO">/rests/operations/data-export-import:immediate-import</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:31.660103" elapsed="0.000380"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.660899" level="INFO">{
  "input" : {
    "check-models" : "false",
    "clear-stores" : "data"
  }
}
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:31.660650" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.661330" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:31.661082" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.661783" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:31.661517" elapsed="0.000309"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:31.662714" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-13T03:03:31.662479" elapsed="0.000262"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-13T03:03:31.663058" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-13T03:03:31.662882" elapsed="0.000201"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-13T03:03:31.663218" elapsed="0.000217"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.663861" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:31.663585" elapsed="0.000320"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-13T03:03:31.663953" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T03:03:31.664132" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-13T03:03:31.662073" elapsed="0.002084"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-13T03:03:31.820087" level="INFO">POST Request : url=http://10.30.170.156:8181/rests/operations/data-export-import:immediate-import 
 path_url=/rests/operations/data-export-import:immediate-import 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node01xjweo48509hn13i12e9r1alkq0.node0', 'Content-Length': '80', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body={
  "input" : {
    "check-models" : "false",
    "clear-stores" : "data"
  }
}
 
 </msg>
<msg time="2026-04-13T03:03:31.820412" level="INFO">POST Response : url=http://10.30.170.156:8181/rests/operations/data-export-import:immediate-import 
 status=200, reason=OK 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '45'} 
 body={"data-export-import:output":{"result":true}} 
 </msg>
<msg time="2026-04-13T03:03:31.820754" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-13T03:03:31.666319" elapsed="0.154503"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:31.664240" elapsed="0.156707"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:31.821435" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:31.821021" elapsed="0.000577"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:31.664218" elapsed="0.157463"/>
</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-04-13T03:03:31.829161" level="INFO">{"data-export-import:output":{"result":true}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:31.824991" elapsed="0.004252"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:31.824587" elapsed="0.004714"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:31.824534" elapsed="0.004808"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.833211" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:31.829866" elapsed="0.003405"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:31.829436" elapsed="0.003879"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:31.829408" elapsed="0.004035"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.834295" 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-04-13T03:03:31.833710" elapsed="0.000621"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:31.834742" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:31.834428" elapsed="0.000386"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.835466" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:31.835051" elapsed="0.000451"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:31.834845" elapsed="0.000707"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:31.834400" elapsed="0.001184"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.836269" 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-04-13T03:03:31.835808" elapsed="0.000495"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:31.836681" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:31.836390" elapsed="0.000363"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.837323" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:31.836965" elapsed="0.000391"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:31.836784" elapsed="0.000617"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:31.836367" elapsed="0.001061"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:31.837615" elapsed="0.000487"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:31.838699" 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-04-13T03:03:31.838301" elapsed="0.000431"/>
</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-04-13T03:03:31.838888" elapsed="0.002807"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</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-04-13T03:03:31.823293" elapsed="0.018504"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-13T03:03:31.842060" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-04-13T03:03:31.841905" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:31.841881" elapsed="0.000265"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-13T03:03:31.844790" level="INFO">${text_normalized} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-13T03:03:31.842282" elapsed="0.002536"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-13T03:03:31.844867" elapsed="0.000038"/>
</return>
<msg time="2026-04-13T03:03:31.845041" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-13T03:03:31.656570" elapsed="0.188496"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:31.845149" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:31.845309" level="INFO">${response_text} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-13T03:03:31.652867" elapsed="0.192468"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:31.845388" elapsed="0.000025"/>
</return>
<arg>${IMPORT_URL}</arg>
<arg>${json}</arg>
<arg>${host_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:31.641126" elapsed="0.204384"/>
</kw>
<msg time="2026-04-13T03:03:31.845598" level="INFO">${resp} = {
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<var>${resp}</var>
<arg>120 seconds</arg>
<arg>10 seconds</arg>
<arg>ClusterManagement.Post As Json To Member</arg>
<arg>${IMPORT_URL}</arg>
<arg>${json}</arg>
<arg>${host_index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-13T03:03:31.635504" elapsed="0.210119"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:31.846163" level="INFO">{
 "data-export-import:output": {
  "result": true
 }
}
</msg>
<arg>${resp}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:31.845804" elapsed="0.000436"/>
</kw>
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${resp}</arg>
<arg>.*"result": ${result}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="PASS" start="2026-04-13T03:03:31.846508" elapsed="0.000466"/>
</kw>
<if>
<branch type="IF" condition="&quot;${reason}&quot; != &quot;${EMPTY}&quot;">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${response_json}</arg>
<arg>.*"reason":"${reason}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:31.849214" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:31.847112" elapsed="0.002162"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:31.847092" elapsed="0.002210"/>
</if>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Schedule an Import API</doc>
<status status="PASS" start="2026-04-13T03:03:31.628558" elapsed="0.220833"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-13T03:03:36.850119" level="INFO">Slept 5 seconds.</msg>
<msg time="2026-04-13T03:03:36.850272" level="INFO">Wait for completion of import processing</msg>
<arg>5 sec</arg>
<arg>Wait for completion of import processing</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-13T03:03:31.849575" elapsed="5.000840"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify Netconf Mount" owner="DaeximKeywords">
<kw name="Verify Status Information" owner="DaeximKeywords">
<for flavor="IN RANGE">
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:36.863982" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:36.863183" elapsed="0.000867"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:36.864174" elapsed="0.000080"/>
</return>
<msg time="2026-04-13T03:03:36.864551" 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-04-13T03:03:36.862336" elapsed="0.002366"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:36.871247" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:36.870948" elapsed="0.000351"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:36.871707" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:36.871442" elapsed="0.000311"/>
</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-04-13T03:03:36.958092" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:36.958437" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Sun, 12-Apr-2026 03:03: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': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:36.958747" 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-04-13T03:03:36.873822" elapsed="0.084994"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:36.871833" elapsed="0.087100"/>
</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-04-13T03:03:36.959402" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:36.959004" elapsed="0.000555"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:36.871809" elapsed="0.087802"/>
</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-04-13T03:03:36.966585" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:36.962407" elapsed="0.004267"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:36.961872" elapsed="0.004841"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:36.961813" elapsed="0.004925"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:36.969467" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:36.967090" elapsed="0.002425"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:36.966800" elapsed="0.002750"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:36.966781" elapsed="0.002794"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:36.970172" 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-04-13T03:03:36.969761" elapsed="0.000440"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:36.970496" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:36.970273" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:36.971064" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:36.970756" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:36.970578" elapsed="0.000618"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:36.970255" elapsed="0.000964"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:36.971760" 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-04-13T03:03:36.971363" elapsed="0.000424"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:36.972080" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:36.971858" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:36.972653" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:36.972303" elapsed="0.000395"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:36.972162" elapsed="0.000582"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:36.971840" elapsed="0.000926"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:36.972912" elapsed="0.000351"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:36.973728" 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-04-13T03:03:36.973414" 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-04-13T03:03:36.973897" elapsed="0.002407"/>
</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-04-13T03:03:36.960659" elapsed="0.015716"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:36.976561" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-13T03:03:36.976449" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:36.976430" 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-04-13T03:03:36.976842" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:36.976914" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T03:03:36.979134" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:36.865184" elapsed="0.113979"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:36.979216" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:36.979368" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:36.860989" elapsed="0.118406"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:36.979866" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:36.979542" elapsed="0.000352"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:36.980892" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:36.980448" elapsed="0.000472"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:36.980970" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:36.981129" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:36.980109" elapsed="0.001046"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:36.981554" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:36.981298" elapsed="0.000304"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:36.985472" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:36.981756" elapsed="0.003745"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:37.002955" elapsed="0.000719"/>
</kw>
<msg time="2026-04-13T03:03:37.003738" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.002578" elapsed="0.001222"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.002182" elapsed="0.001695"/>
</kw>
<msg time="2026-04-13T03:03:37.003922" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:36.994019" elapsed="0.009948"/>
</kw>
<msg time="2026-04-13T03:03:37.004073" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:36.993566" elapsed="0.010532"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.004452" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.004242" elapsed="0.000235"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:37.004528" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:37.004767" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:37.004821" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:36.854625" elapsed="0.150222"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.005251" level="INFO">0</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.004996" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:37.005523" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:37.005374" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.005353" elapsed="0.000238"/>
</if>
<var name="${i}">0</var>
<status status="PASS" start="2026-04-13T03:03:36.854356" elapsed="0.151260"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:37.011663" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.011349" elapsed="0.000342"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:37.011739" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:37.011886" 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-04-13T03:03:37.011019" elapsed="0.000892"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.018256" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.018006" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.018697" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.018439" elapsed="0.000302"/>
</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-04-13T03:03:37.035724" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:37.035876" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:37.036081" 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-04-13T03:03:37.020807" elapsed="0.015330"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.018809" elapsed="0.017421"/>
</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-04-13T03:03:37.036591" elapsed="0.000078"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.036286" elapsed="0.000543"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.018790" elapsed="0.018089"/>
</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-04-13T03:03:37.044675" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.039097" elapsed="0.005858"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.038595" elapsed="0.006442"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.038554" elapsed="0.006539"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.048082" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.045722" elapsed="0.002406"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.045220" elapsed="0.002943"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.045183" elapsed="0.003004"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.048788" 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-04-13T03:03:37.048348" elapsed="0.000467"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.049106" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.048886" elapsed="0.000277"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.049650" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.049330" elapsed="0.000347"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.049187" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.048868" elapsed="0.000865"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.050240" 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-04-13T03:03:37.049875" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.050549" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.050336" elapsed="0.000270"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.051100" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.050801" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.050656" elapsed="0.000504"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.050318" elapsed="0.000862"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.051315" elapsed="0.000371"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:37.052194" 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-04-13T03:03:37.051838" 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-04-13T03:03:37.052364" elapsed="0.002384"/>
</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-04-13T03:03:37.037666" elapsed="0.017147"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:37.054989" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-13T03:03:37.054883" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.054864" 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-04-13T03:03:37.055204" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:37.055273" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:37.057553" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:37.012236" elapsed="0.045346"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:37.057648" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:37.057801" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:37.010475" elapsed="0.047352"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.058315" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.057987" elapsed="0.000355"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.059274" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:37.058878" elapsed="0.000424"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:37.059386" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:37.059545" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:37.058542" elapsed="0.001030"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.059980" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.059729" elapsed="0.000297"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.063694" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.060161" elapsed="0.003562"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:37.080707" elapsed="0.000804"/>
</kw>
<msg time="2026-04-13T03:03:37.081566" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.080348" elapsed="0.001273"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.079979" elapsed="0.001783"/>
</kw>
<msg time="2026-04-13T03:03:37.081816" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.071905" elapsed="0.009959"/>
</kw>
<msg time="2026-04-13T03:03:37.081967" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.071583" elapsed="0.010409"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.082470" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.082191" elapsed="0.000308"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:37.082551" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:37.082768" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:37.082821" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:37.005977" elapsed="0.076869"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.083241" level="INFO">1</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.082994" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:37.083505" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:37.083359" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.083339" elapsed="0.000234"/>
</if>
<var name="${i}">1</var>
<status status="PASS" start="2026-04-13T03:03:37.005777" elapsed="0.077821"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:37.091443" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.091133" elapsed="0.000337"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:37.091519" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:37.091688" 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-04-13T03:03:37.090772" elapsed="0.000942"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.098262" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.098007" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.098836" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.098475" elapsed="0.000423"/>
</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-04-13T03:03:37.114546" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:37.114794" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:37.114933" 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-04-13T03:03:37.101108" elapsed="0.013895"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.098997" elapsed="0.016115"/>
</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-04-13T03:03:37.115686" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.115171" elapsed="0.000721"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.098969" elapsed="0.017002"/>
</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-04-13T03:03:37.124571" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.118509" elapsed="0.006237"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.118038" elapsed="0.006873"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.117993" elapsed="0.006995"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.128249" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.125689" elapsed="0.002626"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.125153" elapsed="0.003210"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.125106" elapsed="0.003284"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.129016" 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-04-13T03:03:37.128555" elapsed="0.000489"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.129341" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.129117" elapsed="0.000284"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.129894" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.129571" elapsed="0.000353"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.129425" elapsed="0.000537"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.129097" elapsed="0.000886"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.130502" 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-04-13T03:03:37.130126" elapsed="0.000403"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.130846" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.130600" elapsed="0.000304"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.131403" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.131071" elapsed="0.000359"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.130928" elapsed="0.000538"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.130582" elapsed="0.000906"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.131651" elapsed="0.000364"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:37.132467" 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-04-13T03:03:37.132168" elapsed="0.000326"/>
</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-04-13T03:03:37.132649" elapsed="0.002379"/>
</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-04-13T03:03:37.116928" elapsed="0.018166"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:37.135277" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-13T03:03:37.135166" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.135146" 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-04-13T03:03:37.135500" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:37.135573" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:37.137914" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:37.092043" elapsed="0.045941"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:37.138049" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:37.138209" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:37.090211" elapsed="0.048026"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.138711" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.138383" elapsed="0.000365"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.139720" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:37.139293" elapsed="0.000458"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:37.139801" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:37.139975" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:37.138969" elapsed="0.001034"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.140400" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.140146" elapsed="0.000303"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.145488" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.140586" elapsed="0.004940"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:37.168921" elapsed="0.001250"/>
</kw>
<msg time="2026-04-13T03:03:37.170267" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.168354" elapsed="0.002011"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.167831" elapsed="0.002657"/>
</kw>
<msg time="2026-04-13T03:03:37.170557" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.157245" elapsed="0.013380"/>
</kw>
<msg time="2026-04-13T03:03:37.170809" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.156728" elapsed="0.014119"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.171319" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.171073" elapsed="0.000284"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:37.171434" elapsed="0.000051"/>
</return>
<msg time="2026-04-13T03:03:37.171765" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:37.171841" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:37.083974" elapsed="0.087902"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.172348" level="INFO">2</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.172053" elapsed="0.000353"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:37.172683" elapsed="0.000022"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:37.172497" elapsed="0.000237"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.172473" elapsed="0.000286"/>
</if>
<var name="${i}">2</var>
<status status="PASS" start="2026-04-13T03:03:37.083761" elapsed="0.089076"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:37.180421" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.179993" elapsed="0.000545"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:37.180614" elapsed="0.000057"/>
</return>
<msg time="2026-04-13T03:03:37.180847" 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-04-13T03:03:37.179514" elapsed="0.001362"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.189566" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.189168" elapsed="0.000488"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.190243" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.189867" elapsed="0.000443"/>
</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-04-13T03:03:37.205923" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:37.206104" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:37.206229" 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-04-13T03:03:37.192711" elapsed="0.013547"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.190425" elapsed="0.015882"/>
</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-04-13T03:03:37.206509" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.206339" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.190391" elapsed="0.016216"/>
</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-04-13T03:03:37.210852" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.207932" elapsed="0.003001"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.207703" elapsed="0.003309"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.207680" elapsed="0.003370"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.214976" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.211562" elapsed="0.003482"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.211190" elapsed="0.003915"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.211151" elapsed="0.003999"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.216093" 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-04-13T03:03:37.215433" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.216544" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.216234" elapsed="0.000413"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.217522" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.217015" elapsed="0.000545"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.216684" elapsed="0.000928"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.216208" elapsed="0.001476"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.218327" 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-04-13T03:03:37.217898" elapsed="0.000456"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.218665" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.218427" elapsed="0.000298"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.219190" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.218892" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.218749" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.218408" elapsed="0.000874"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.219424" elapsed="0.000369"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:37.220328" 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-04-13T03:03:37.219945" elapsed="0.000410"/>
</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-04-13T03:03:37.220498" elapsed="0.002447"/>
</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-04-13T03:03:37.207122" elapsed="0.015892"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:37.223205" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-13T03:03:37.223090" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.223069" elapsed="0.000238"/>
</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-04-13T03:03:37.223454" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:37.223528" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:37.226125" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:37.181210" elapsed="0.044949"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:37.226224" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:03:37.226413" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:37.178753" elapsed="0.047695"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.227088" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.226672" elapsed="0.000446"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.228277" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:37.227809" elapsed="0.000497"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:37.228355" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:37.228571" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:37.227361" elapsed="0.001248"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.229410" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.228776" elapsed="0.000733"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.233487" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.229694" elapsed="0.003827"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:37.250917" elapsed="0.000677"/>
</kw>
<msg time="2026-04-13T03:03:37.251681" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.250526" elapsed="0.001216"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.250133" elapsed="0.001701"/>
</kw>
<msg time="2026-04-13T03:03:37.251882" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.241853" elapsed="0.010078"/>
</kw>
<msg time="2026-04-13T03:03:37.252039" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.241504" elapsed="0.010560"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.252484" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.252273" elapsed="0.000237"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:37.252565" elapsed="0.000045"/>
</return>
<msg time="2026-04-13T03:03:37.252810" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:37.252912" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:37.173219" elapsed="0.079726"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.253378" level="INFO">3</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.253115" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:37.253672" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:37.253501" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.253480" elapsed="0.000262"/>
</if>
<var name="${i}">3</var>
<status status="PASS" start="2026-04-13T03:03:37.173012" elapsed="0.080756"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:37.259891" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.259553" elapsed="0.000367"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:37.259971" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:37.260127" 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-04-13T03:03:37.259219" elapsed="0.000933"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.266611" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.266319" elapsed="0.000363"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.267072" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.266826" 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-04-13T03:03:37.282582" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:37.282998" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:37.283262" 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-04-13T03:03:37.269257" elapsed="0.014071"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.267196" elapsed="0.016265"/>
</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-04-13T03:03:37.283987" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.283563" elapsed="0.000584"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.267173" elapsed="0.017027"/>
</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-04-13T03:03:37.290862" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.286576" elapsed="0.004374"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.286230" elapsed="0.004775"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.286198" elapsed="0.004846"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.294853" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.291453" elapsed="0.003485"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.291131" elapsed="0.003866"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.291105" elapsed="0.003928"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.295858" 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-04-13T03:03:37.295269" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.296331" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.296016" elapsed="0.000400"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.297182" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.296678" elapsed="0.000541"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.296451" elapsed="0.000913"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.295986" elapsed="0.001411"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.298328" 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-04-13T03:03:37.297714" elapsed="0.000642"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.298678" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.298431" elapsed="0.000307"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.299218" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.298906" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.298763" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.298412" elapsed="0.000892"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.299448" elapsed="0.000378"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:37.300303" 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-04-13T03:03:37.299984" 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-04-13T03:03:37.300476" elapsed="0.002549"/>
</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-04-13T03:03:37.285235" elapsed="0.017871"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:37.303307" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T03:03:37.303191" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.303170" elapsed="0.000234"/>
</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-04-13T03:03:37.303544" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:37.303616" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:03:37.305965" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:37.260480" elapsed="0.045514"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:37.306048" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:37.306238" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:37.258670" elapsed="0.047598"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.306783" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.306435" elapsed="0.000378"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.307869" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:37.307426" elapsed="0.000472"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:37.307949" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:37.308114" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:37.307037" elapsed="0.001103"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.308574" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.308306" elapsed="0.000317"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.312694" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.308782" elapsed="0.003948"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:37.331005" elapsed="0.000749"/>
</kw>
<msg time="2026-04-13T03:03:37.331826" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.330604" elapsed="0.001288"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.330143" elapsed="0.001828"/>
</kw>
<msg time="2026-04-13T03:03:37.332017" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.321805" elapsed="0.010258"/>
</kw>
<msg time="2026-04-13T03:03:37.332173" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.321323" elapsed="0.010875"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.332568" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.332345" elapsed="0.000248"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:37.332670" elapsed="0.000044"/>
</return>
<msg time="2026-04-13T03:03:37.332973" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:37.333028" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:37.254120" elapsed="0.078933"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.333454" level="INFO">4</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.333203" elapsed="0.000296"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:37.333747" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:37.333577" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.333555" elapsed="0.000260"/>
</if>
<var name="${i}">4</var>
<status status="PASS" start="2026-04-13T03:03:37.253919" elapsed="0.079922"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:37.340148" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.339844" elapsed="0.000330"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:37.340221" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:37.340374" 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-04-13T03:03:37.339487" elapsed="0.000911"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.347292" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.347030" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.347739" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.347478" elapsed="0.000304"/>
</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-04-13T03:03:37.364253" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:37.364489" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:37.364690" 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-04-13T03:03:37.349874" elapsed="0.014858"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.347854" elapsed="0.016951"/>
</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-04-13T03:03:37.365168" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.364851" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.347832" elapsed="0.017473"/>
</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-04-13T03:03:37.373567" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.367459" elapsed="0.006388"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.366944" elapsed="0.006986"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.366899" elapsed="0.007061"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.376510" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.374232" elapsed="0.002329"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.374017" elapsed="0.002578"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.374000" elapsed="0.002620"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.377246" 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-04-13T03:03:37.376809" elapsed="0.000463"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.377583" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.377344" elapsed="0.000335"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.378173" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.377865" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.377710" elapsed="0.000525"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.377324" elapsed="0.000932"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.378810" 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-04-13T03:03:37.378398" elapsed="0.000438"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.379167" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.378929" elapsed="0.000297"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.379740" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.379391" elapsed="0.000376"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.379250" elapsed="0.000554"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.378901" elapsed="0.000924"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.379966" elapsed="0.000351"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:37.380807" 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-04-13T03:03:37.380468" elapsed="0.000366"/>
</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-04-13T03:03:37.380998" elapsed="0.002394"/>
</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-04-13T03:03:37.365891" elapsed="0.017570"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:37.383679" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-13T03:03:37.383533" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.383514" elapsed="0.000266"/>
</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-04-13T03:03:37.383914" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:37.383985" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:37.386228" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:37.340814" elapsed="0.045444"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:37.386310" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:37.386464" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:37.338844" elapsed="0.047647"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.386955" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.386653" elapsed="0.000329"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.387965" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:37.387526" elapsed="0.000467"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:37.388085" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:37.388248" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:37.387195" elapsed="0.001079"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.388693" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.388417" elapsed="0.000329"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.392536" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.388885" elapsed="0.003680"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:37.411428" elapsed="0.000707"/>
</kw>
<msg time="2026-04-13T03:03:37.412353" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.411047" elapsed="0.001368"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.410657" elapsed="0.001838"/>
</kw>
<msg time="2026-04-13T03:03:37.412538" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.402324" elapsed="0.010260"/>
</kw>
<msg time="2026-04-13T03:03:37.412707" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.401949" elapsed="0.010785"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.413115" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.412877" elapsed="0.000264"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:37.413317" elapsed="0.000038"/>
</return>
<msg time="2026-04-13T03:03:37.413526" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:37.413578" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:37.334208" elapsed="0.079396"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.414022" level="INFO">5</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.413776" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:37.414287" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:37.414140" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.414120" elapsed="0.000245"/>
</if>
<var name="${i}">5</var>
<status status="PASS" start="2026-04-13T03:03:37.333994" elapsed="0.080399"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:37.420573" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.420265" elapsed="0.000336"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:37.420678" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:37.420830" 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-04-13T03:03:37.419931" elapsed="0.000924"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.427367" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.427113" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.427833" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.427565" elapsed="0.000311"/>
</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-04-13T03:03:37.444180" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:37.444578" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:37.444864" 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-04-13T03:03:37.429978" elapsed="0.014995"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.427945" elapsed="0.017134"/>
</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-04-13T03:03:37.445474" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.445142" elapsed="0.000553"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.427925" 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-04-13T03:03:37.452555" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.448279" elapsed="0.004374"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.447746" elapsed="0.004988"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.447687" elapsed="0.005113"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.456510" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.453251" elapsed="0.003326"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.452896" elapsed="0.003730"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.452870" elapsed="0.003819"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.457589" 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-04-13T03:03:37.456982" elapsed="0.000665"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.458047" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.457754" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.458613" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.458306" elapsed="0.000350"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.458135" elapsed="0.000560"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.457727" elapsed="0.000990"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.459271" 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-04-13T03:03:37.458859" elapsed="0.000439"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.459590" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.459371" elapsed="0.000305"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.460175" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.459844" elapsed="0.000372"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.459702" elapsed="0.000559"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.459353" elapsed="0.000931"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.460435" elapsed="0.000413"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:37.461400" 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-04-13T03:03:37.461049" elapsed="0.000378"/>
</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-04-13T03:03:37.461569" elapsed="0.002561"/>
</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-04-13T03:03:37.446587" elapsed="0.017615"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:37.464402" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-13T03:03:37.464284" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.464261" elapsed="0.000238"/>
</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-04-13T03:03:37.464654" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:37.464726" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:37.466988" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:37.421286" elapsed="0.045795"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:37.467141" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:37.467301" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:37.419359" elapsed="0.047969"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.467829" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.467503" elapsed="0.000355"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.468926" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:37.468489" elapsed="0.000500"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:37.469042" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:37.469237" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:37.468098" elapsed="0.001167"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.469720" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.469423" elapsed="0.000346"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.473772" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.469908" elapsed="0.003894"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:37.491468" elapsed="0.000760"/>
</kw>
<msg time="2026-04-13T03:03:37.492292" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.491121" elapsed="0.001231"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.490720" elapsed="0.001710"/>
</kw>
<msg time="2026-04-13T03:03:37.492474" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.482286" elapsed="0.010248"/>
</kw>
<msg time="2026-04-13T03:03:37.492684" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.481959" elapsed="0.010752"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.493137" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.492874" elapsed="0.000289"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:37.493214" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T03:03:37.493410" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:37.493464" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:37.414757" elapsed="0.078732"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.493974" level="INFO">6</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.493682" elapsed="0.000338"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:37.494247" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:37.494097" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.494076" elapsed="0.000237"/>
</if>
<var name="${i}">6</var>
<status status="PASS" start="2026-04-13T03:03:37.414544" elapsed="0.079794"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:37.500560" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.500247" elapsed="0.000452"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:37.500761" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T03:03:37.500940" 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-04-13T03:03:37.499888" elapsed="0.001103"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.507645" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.507332" elapsed="0.000368"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.508144" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.507863" elapsed="0.000328"/>
</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-04-13T03:03:37.524106" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:37.524312" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:37.524478" 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-04-13T03:03:37.510339" elapsed="0.014177"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.508275" elapsed="0.016305"/>
</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-04-13T03:03:37.524852" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.524621" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.508250" elapsed="0.016750"/>
</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-04-13T03:03:37.530263" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.526490" elapsed="0.003856"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.526175" elapsed="0.004223"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.526147" elapsed="0.004298"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.534257" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.530896" elapsed="0.003429"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.530547" elapsed="0.003850"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.530517" elapsed="0.003921"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.535336" 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-04-13T03:03:37.534751" elapsed="0.000643"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.535889" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.535519" elapsed="0.000457"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.536769" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.536215" elapsed="0.000592"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.536012" elapsed="0.000845"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.535490" elapsed="0.001399"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.537726" 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-04-13T03:03:37.537126" elapsed="0.000642"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.538217" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.537869" elapsed="0.000430"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.539033" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.538559" elapsed="0.000513"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.538333" elapsed="0.000789"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.537843" elapsed="0.001309"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.539350" elapsed="0.000586"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:37.540751" 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-04-13T03:03:37.540148" elapsed="0.000647"/>
</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-04-13T03:03:37.541041" elapsed="0.002813"/>
</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-04-13T03:03:37.525539" elapsed="0.018387"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:37.544116" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T03:03:37.544000" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.543980" 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-04-13T03:03:37.544347" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:37.544419" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:37.546683" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:37.501322" elapsed="0.045392"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:37.546768" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:37.546923" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:37.499299" elapsed="0.047651"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.547400" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.547097" elapsed="0.000331"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.548429" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:37.548022" elapsed="0.000436"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:37.548505" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:37.548708" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:37.547674" elapsed="0.001063"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.549186" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.548882" elapsed="0.000352"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.552931" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.549373" elapsed="0.003594"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:37.571375" elapsed="0.000795"/>
</kw>
<msg time="2026-04-13T03:03:37.572258" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.570896" elapsed="0.001436"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.570345" elapsed="0.002071"/>
</kw>
<msg time="2026-04-13T03:03:37.572462" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.561699" elapsed="0.010808"/>
</kw>
<msg time="2026-04-13T03:03:37.572618" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.561298" elapsed="0.011364"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.573150" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.572884" elapsed="0.000295"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:37.573246" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T03:03:37.573465" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:37.573517" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:37.494723" elapsed="0.078818"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.573969" level="INFO">7</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.573711" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:37.574287" elapsed="0.000022"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:37.574103" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.574074" elapsed="0.000288"/>
</if>
<var name="${i}">7</var>
<status status="PASS" start="2026-04-13T03:03:37.494486" elapsed="0.079902"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:37.582005" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.581662" elapsed="0.000375"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:37.582091" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T03:03:37.582262" 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-04-13T03:03:37.581294" elapsed="0.000998"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.589060" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.588744" elapsed="0.000368"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.589556" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.589255" elapsed="0.000350"/>
</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-04-13T03:03:37.606163" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:37.606496" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:37.606903" 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-04-13T03:03:37.591754" elapsed="0.015233"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.589708" elapsed="0.017398"/>
</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-04-13T03:03:37.607584" elapsed="0.000091"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.607179" elapsed="0.000669"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.589681" elapsed="0.018275"/>
</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-04-13T03:03:37.615900" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.610848" elapsed="0.005172"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.610310" elapsed="0.005769"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.610264" elapsed="0.005855"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.619993" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.616538" elapsed="0.003531"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.616209" elapsed="0.003919"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.616182" elapsed="0.003990"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.621061" 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-04-13T03:03:37.620417" elapsed="0.000686"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.621566" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.621230" elapsed="0.000447"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.622414" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.621939" elapsed="0.000516"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.621715" elapsed="0.000883"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.621198" elapsed="0.001478"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.623476" 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-04-13T03:03:37.622901" elapsed="0.000617"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.623997" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.623662" elapsed="0.000423"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.624824" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.624356" elapsed="0.000508"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.624122" elapsed="0.000797"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.623599" elapsed="0.001353"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.625209" elapsed="0.000565"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:37.626290" 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-04-13T03:03:37.625977" 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-04-13T03:03:37.626462" elapsed="0.002537"/>
</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-04-13T03:03:37.609065" elapsed="0.020024"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:37.629276" elapsed="0.000043"/>
</return>
<status status="PASS" start="2026-04-13T03:03:37.629163" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.629143" elapsed="0.000239"/>
</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-04-13T03:03:37.629517" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:37.629588" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:37.631846" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:37.582625" elapsed="0.049250"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:37.631928" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:37.632082" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:37.580603" elapsed="0.051506"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.632576" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.632255" elapsed="0.000351"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.633686" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:37.633236" elapsed="0.000480"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:37.633767" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:37.633928" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:37.632846" elapsed="0.001109"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.634369" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.634103" elapsed="0.000320"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.638182" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.634562" elapsed="0.003649"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:37.656011" elapsed="0.000814"/>
</kw>
<msg time="2026-04-13T03:03:37.656914" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.655584" elapsed="0.001405"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.655113" elapsed="0.002009"/>
</kw>
<msg time="2026-04-13T03:03:37.657322" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.646760" elapsed="0.010609"/>
</kw>
<msg time="2026-04-13T03:03:37.657485" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.646346" elapsed="0.011164"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.657904" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.657679" elapsed="0.000251"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:37.657984" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T03:03:37.658189" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:37.658245" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:37.574787" elapsed="0.083483"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.658691" level="INFO">8</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.658424" elapsed="0.000313"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:37.658975" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:37.658819" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.658796" elapsed="0.000249"/>
</if>
<var name="${i}">8</var>
<status status="PASS" start="2026-04-13T03:03:37.574548" elapsed="0.084521"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:37.665576" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.665189" elapsed="0.000417"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:37.665680" elapsed="0.000042"/>
</return>
<msg time="2026-04-13T03:03:37.665851" 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-04-13T03:03:37.664614" elapsed="0.001267"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.672395" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.672131" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.672851" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.672582" elapsed="0.000312"/>
</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-04-13T03:03:37.688293" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:37.688610" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:37.688903" 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-04-13T03:03:37.674982" elapsed="0.013984"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.672972" elapsed="0.016143"/>
</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-04-13T03:03:37.689556" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.689185" elapsed="0.000556"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.672949" elapsed="0.016846"/>
</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-04-13T03:03:37.697130" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.692354" elapsed="0.004954"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.691786" elapsed="0.005580"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.691738" elapsed="0.005670"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.701349" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.697858" elapsed="0.003565"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.697502" elapsed="0.003974"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.697474" elapsed="0.004041"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.702375" 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-04-13T03:03:37.701781" elapsed="0.000635"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.702884" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.702526" elapsed="0.000444"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.703714" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.703224" elapsed="0.000533"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.703006" elapsed="0.000806"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.702498" elapsed="0.001346"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.704683" 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-04-13T03:03:37.704088" elapsed="0.000636"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.705227" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.704829" elapsed="0.000489"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.706005" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.705567" elapsed="0.000464"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.705354" elapsed="0.000713"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.704801" elapsed="0.001288"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.706235" elapsed="0.000352"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:37.707074" 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-04-13T03:03:37.706757" 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-04-13T03:03:37.707241" elapsed="0.002532"/>
</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-04-13T03:03:37.690694" elapsed="0.019150"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:37.710042" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-13T03:03:37.709919" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.709899" 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-04-13T03:03:37.710278" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:37.710347" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:37.712589" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:37.666226" elapsed="0.046392"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:37.712686" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:37.712847" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:37.664028" elapsed="0.048846"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.713686" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.713029" elapsed="0.000693"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.714765" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:37.714322" elapsed="0.000472"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:37.714911" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T03:03:37.715082" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:37.713959" elapsed="0.001152"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.715536" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.715261" elapsed="0.000326"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.719331" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.715743" elapsed="0.003617"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:37.737849" elapsed="0.000710"/>
</kw>
<msg time="2026-04-13T03:03:37.738664" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.737458" elapsed="0.001275"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.736996" elapsed="0.001817"/>
</kw>
<msg time="2026-04-13T03:03:37.738858" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.728270" elapsed="0.010634"/>
</kw>
<msg time="2026-04-13T03:03:37.739018" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.727782" elapsed="0.011261"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.739401" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.739190" elapsed="0.000236"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:37.739479" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:03:37.739693" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:37.739746" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:37.659443" elapsed="0.080327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.740163" level="INFO">9</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.739918" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:37.740439" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:37.740287" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.740266" elapsed="0.000240"/>
</if>
<var name="${i}">9</var>
<status status="PASS" start="2026-04-13T03:03:37.659228" elapsed="0.081302"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:37.746714" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.746388" elapsed="0.000354"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:37.746791" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:03:37.746946" 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-04-13T03:03:37.746056" elapsed="0.000915"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.753296" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.753012" elapsed="0.000329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.753735" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.753476" elapsed="0.000303"/>
</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-04-13T03:03:37.768741" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:37.769068" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:37.769305" 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-04-13T03:03:37.755831" elapsed="0.013516"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.753849" elapsed="0.015574"/>
</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-04-13T03:03:37.769758" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.769470" elapsed="0.000387"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.753829" elapsed="0.016061"/>
</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-04-13T03:03:37.778368" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.772217" elapsed="0.006282"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.771743" elapsed="0.006847"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.771697" elapsed="0.006988"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.783289" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.779356" elapsed="0.003983"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.778842" elapsed="0.004533"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.778796" elapsed="0.004604"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.784043" 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-04-13T03:03:37.783587" elapsed="0.000484"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.784367" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.784144" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.784926" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.784593" elapsed="0.000360"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.784448" elapsed="0.000541"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.784125" elapsed="0.000886"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.785535" 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-04-13T03:03:37.785170" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.785876" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.785657" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.786395" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.786101" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.785960" elapsed="0.000495"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.785613" elapsed="0.000863"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.786620" elapsed="0.000362"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:37.787478" 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-04-13T03:03:37.787133" elapsed="0.000372"/>
</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-04-13T03:03:37.787663" elapsed="0.002497"/>
</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-04-13T03:03:37.770724" elapsed="0.019507"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:37.790419" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-13T03:03:37.790308" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.790287" elapsed="0.000228"/>
</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-04-13T03:03:37.790668" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:37.790738" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:37.793057" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:37.747295" elapsed="0.045928"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:37.793281" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:37.793439" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:37.745490" elapsed="0.047975"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.793938" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.793614" elapsed="0.000351"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.794970" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:37.794532" elapsed="0.000466"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:37.795046" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:37.795204" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:37.794187" elapsed="0.001043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.795642" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.795371" elapsed="0.000319"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.800129" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.795828" elapsed="0.004339"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:37.818054" elapsed="0.000729"/>
</kw>
<msg time="2026-04-13T03:03:37.818848" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.817701" elapsed="0.001210"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.817281" elapsed="0.001708"/>
</kw>
<msg time="2026-04-13T03:03:37.819032" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.808841" elapsed="0.010235"/>
</kw>
<msg time="2026-04-13T03:03:37.819182" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.808432" elapsed="0.010775"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.819560" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.819349" elapsed="0.000236"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:37.819651" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:03:37.819852" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:37.819906" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:37.740926" elapsed="0.079013"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.820421" level="INFO">10</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.820120" elapsed="0.000353"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:37.820747" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:37.820565" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.820539" elapsed="0.000280"/>
</if>
<var name="${i}">10</var>
<status status="PASS" start="2026-04-13T03:03:37.740712" elapsed="0.080132"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:37.827035" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.826717" elapsed="0.000408"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:37.827178" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T03:03:37.827341" 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-04-13T03:03:37.826361" elapsed="0.001006"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.833931" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.833666" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.834368" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.834119" elapsed="0.000293"/>
</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-04-13T03:03:37.852123" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:37.852550" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:37.852945" 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-04-13T03:03:37.836458" elapsed="0.016580"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.834488" elapsed="0.018743"/>
</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-04-13T03:03:37.853898" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.853324" elapsed="0.000728"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.834465" elapsed="0.019640"/>
</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-04-13T03:03:37.862177" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.856580" elapsed="0.005688"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.856073" elapsed="0.006254"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.856032" elapsed="0.006339"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.866140" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.862827" elapsed="0.003382"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.862471" elapsed="0.003787"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.862442" elapsed="0.003848"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.867130" 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-04-13T03:03:37.866531" elapsed="0.000640"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.867618" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.867288" elapsed="0.000432"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.868409" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.867952" elapsed="0.000499"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.867752" elapsed="0.000756"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.867256" elapsed="0.001287"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.869432" 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-04-13T03:03:37.868826" elapsed="0.000641"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.869868" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.869580" elapsed="0.000349"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.870484" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.870117" elapsed="0.000406"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.869955" elapsed="0.000621"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.869548" elapsed="0.001060"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.870856" elapsed="0.000472"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:37.871895" 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-04-13T03:03:37.871489" elapsed="0.000436"/>
</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-04-13T03:03:37.872094" elapsed="0.002635"/>
</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-04-13T03:03:37.855029" elapsed="0.019772"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:37.874994" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-13T03:03:37.874877" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.874855" elapsed="0.000239"/>
</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-04-13T03:03:37.875240" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:37.875346" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T03:03:37.878521" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:37.827719" elapsed="0.050834"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:37.878625" elapsed="0.000055"/>
</return>
<msg time="2026-04-13T03:03:37.878821" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:37.825817" elapsed="0.053032"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.879334" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.879010" elapsed="0.000353"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.880715" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:37.880093" elapsed="0.000664"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:37.880828" elapsed="0.000041"/>
</return>
<msg time="2026-04-13T03:03:37.881058" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:37.879586" elapsed="0.001511"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.881725" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.881330" elapsed="0.000466"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.887109" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.881991" elapsed="0.005163"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:37.906332" elapsed="0.000765"/>
</kw>
<msg time="2026-04-13T03:03:37.907163" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.905966" elapsed="0.001263"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.905541" elapsed="0.001771"/>
</kw>
<msg time="2026-04-13T03:03:37.907359" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.896848" elapsed="0.010557"/>
</kw>
<msg time="2026-04-13T03:03:37.907517" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.896441" elapsed="0.011102"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.908025" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.907787" elapsed="0.000267"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:37.908109" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T03:03:37.908315" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:37.908369" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:37.821251" elapsed="0.087142"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.908828" level="INFO">11</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.908550" elapsed="0.000326"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:37.909109" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:37.908957" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.908934" elapsed="0.000290"/>
</if>
<var name="${i}">11</var>
<status status="PASS" start="2026-04-13T03:03:37.821008" elapsed="0.088244"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:37.916090" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.915768" elapsed="0.000350"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:37.916165" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:03:37.916320" 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-04-13T03:03:37.915273" elapsed="0.001073"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.922958" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.922698" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.923391" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.923143" elapsed="0.000294"/>
</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-04-13T03:03:37.940079" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:37.940373" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:37.940591" 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-04-13T03:03:37.925501" elapsed="0.015190"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.923507" elapsed="0.017282"/>
</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-04-13T03:03:37.941175" elapsed="0.000096"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.940850" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.923487" elapsed="0.017931"/>
</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-04-13T03:03:37.948197" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.943747" elapsed="0.004522"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.943238" elapsed="0.005081"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.943192" elapsed="0.005162"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.951953" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.948753" elapsed="0.003278"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.948436" elapsed="0.003644"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.948412" elapsed="0.003702"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.952906" 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-04-13T03:03:37.952331" elapsed="0.000614"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.953400" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.953045" elapsed="0.000438"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.954107" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.953744" elapsed="0.000390"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.953517" elapsed="0.000713"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.953018" elapsed="0.001235"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.954784" 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-04-13T03:03:37.954397" elapsed="0.000415"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:37.955101" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:37.954883" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.955625" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.955327" elapsed="0.000355"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:37.955184" elapsed="0.000535"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.954864" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.955879" elapsed="0.000368"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:37.956727" 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-04-13T03:03:37.956401" 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-04-13T03:03:37.956894" elapsed="0.002473"/>
</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-04-13T03:03:37.942223" elapsed="0.017214"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:37.959623" elapsed="0.000058"/>
</return>
<status status="PASS" start="2026-04-13T03:03:37.959511" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.959491" elapsed="0.000253"/>
</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-04-13T03:03:37.959883" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:37.959968" elapsed="0.000018"/>
</return>
<msg time="2026-04-13T03:03:37.962166" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:37.916686" elapsed="0.045509"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:37.962247" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:37.962402" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:37.914722" elapsed="0.047708"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.962900" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.962584" elapsed="0.000346"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.963891" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:37.963468" elapsed="0.000454"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:37.963977" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:37.964142" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:37.963134" elapsed="0.001034"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.964567" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.964311" elapsed="0.000302"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.968334" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.964768" elapsed="0.003595"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:37.985770" elapsed="0.000717"/>
</kw>
<msg time="2026-04-13T03:03:37.986552" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.985384" elapsed="0.001235"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.984958" elapsed="0.001782"/>
</kw>
<msg time="2026-04-13T03:03:37.986787" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:37.976792" elapsed="0.010041"/>
</kw>
<msg time="2026-04-13T03:03:37.986945" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:37.976423" elapsed="0.010548"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:37.987337" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:37.987121" elapsed="0.000243"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:37.987417" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:03:37.987619" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:37.987692" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:37.909609" elapsed="0.078109"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:37.988126" level="INFO">12</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:37.987870" elapsed="0.000304"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:37.988402" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:37.988251" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:37.988229" elapsed="0.000241"/>
</if>
<var name="${i}">12</var>
<status status="PASS" start="2026-04-13T03:03:37.909407" elapsed="0.079088"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:37.994654" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:37.994332" elapsed="0.000351"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:37.994730" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:37.994883" 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-04-13T03:03:37.993994" elapsed="0.000914"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.001205" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.000951" elapsed="0.000319"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.001691" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.001424" elapsed="0.000311"/>
</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-04-13T03:03:38.017314" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:38.017597" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:38.017854" 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-04-13T03:03:38.003743" elapsed="0.014168"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.001804" elapsed="0.016198"/>
</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-04-13T03:03:38.018364" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.018058" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.001783" elapsed="0.016765"/>
</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-04-13T03:03:38.026299" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.020930" elapsed="0.005473"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.020435" elapsed="0.006003"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.020393" elapsed="0.006070"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.028959" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.026744" elapsed="0.002262"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.026519" elapsed="0.002521"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.026503" elapsed="0.002561"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.029621" 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-04-13T03:03:38.029219" elapsed="0.000447"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.029956" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.029737" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.030478" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.030180" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.030037" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.029719" elapsed="0.000841"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.031124" 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-04-13T03:03:38.030717" elapsed="0.000435"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.031446" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.031224" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.032151" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.031751" elapsed="0.000437"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.031543" elapsed="0.000696"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.031206" elapsed="0.001062"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.032450" elapsed="0.000485"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:38.033435" 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-04-13T03:03:38.033091" 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-04-13T03:03:38.033604" elapsed="0.002352"/>
</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-04-13T03:03:38.019480" elapsed="0.016557"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:38.036260" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-13T03:03:38.036124" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.036100" elapsed="0.000253"/>
</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-04-13T03:03:38.036488" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:38.036560" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:38.038828" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:37.995228" elapsed="0.043630"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:38.038911" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.039066" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:37.993405" elapsed="0.045688"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.039535" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.039240" elapsed="0.000322"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.040642" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:38.040128" elapsed="0.000544"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:38.040760" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:38.040927" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:38.039783" elapsed="0.001174"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.041405" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.041102" elapsed="0.000352"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.045226" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.041593" elapsed="0.003676"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:38.062708" elapsed="0.000686"/>
</kw>
<msg time="2026-04-13T03:03:38.063450" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.062342" elapsed="0.001166"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.061957" elapsed="0.001629"/>
</kw>
<msg time="2026-04-13T03:03:38.063659" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.053619" elapsed="0.010090"/>
</kw>
<msg time="2026-04-13T03:03:38.063815" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.053302" elapsed="0.010539"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.064203" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.063995" elapsed="0.000235"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:38.064280" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:38.064475" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:38.064527" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:37.988871" elapsed="0.075681"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.064978" level="INFO">13</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.064725" elapsed="0.000298"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:38.065242" elapsed="0.000037"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:38.065095" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.065075" elapsed="0.000259"/>
</if>
<var name="${i}">13</var>
<status status="PASS" start="2026-04-13T03:03:37.988664" elapsed="0.076695"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:38.072649" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.072296" elapsed="0.000384"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:38.072736" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T03:03:38.072894" 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-04-13T03:03:38.071958" elapsed="0.000960"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.079377" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.079112" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.079837" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.079567" elapsed="0.000314"/>
</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-04-13T03:03:38.095269" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:38.095674" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:38.095908" 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-04-13T03:03:38.081938" elapsed="0.014024"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.079958" elapsed="0.016092"/>
</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-04-13T03:03:38.096421" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.096109" elapsed="0.000443"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.079937" elapsed="0.016662"/>
</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-04-13T03:03:38.103399" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.098828" elapsed="0.004648"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.098351" elapsed="0.005178"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.098312" elapsed="0.005256"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.107185" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.104001" elapsed="0.003253"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.103686" elapsed="0.003621"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.103656" elapsed="0.003692"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.108238" 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-04-13T03:03:38.107604" elapsed="0.000677"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.108777" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.108391" elapsed="0.000476"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.109668" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.109138" elapsed="0.000568"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.108907" elapsed="0.000851"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.108362" elapsed="0.001431"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.110472" 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-04-13T03:03:38.109984" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.110977" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.110617" elapsed="0.000441"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.111764" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.111306" elapsed="0.000488"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.111094" elapsed="0.000738"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.110590" elapsed="0.001263"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.112023" elapsed="0.000441"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:38.112993" 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-04-13T03:03:38.112622" elapsed="0.000410"/>
</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-04-13T03:03:38.113238" elapsed="0.059867"/>
</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-04-13T03:03:38.097431" elapsed="0.075780"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:38.173473" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-13T03:03:38.173332" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.173282" elapsed="0.000296"/>
</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-04-13T03:03:38.173774" elapsed="0.000028"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:38.173853" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:38.176137" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:38.073284" elapsed="0.102965"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:38.176308" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.176467" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:38.071404" elapsed="0.105090"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.177013" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.176662" elapsed="0.000379"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.178149" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:38.177709" elapsed="0.000473"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:38.178236" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:38.178401" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:38.177276" elapsed="0.001152"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.178865" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.178574" elapsed="0.000338"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.182659" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.179054" elapsed="0.003635"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:38.200194" elapsed="0.000789"/>
</kw>
<msg time="2026-04-13T03:03:38.201047" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.199839" elapsed="0.001272"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.199430" elapsed="0.001758"/>
</kw>
<msg time="2026-04-13T03:03:38.201232" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.191195" elapsed="0.010083"/>
</kw>
<msg time="2026-04-13T03:03:38.201417" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.190812" elapsed="0.010631"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.201833" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.201600" elapsed="0.000260"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:38.201911" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T03:03:38.202109" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:38.202163" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:38.065721" elapsed="0.136467"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.202597" level="INFO">14</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.202339" elapsed="0.000329"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:38.202903" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:38.202748" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.202727" elapsed="0.000249"/>
</if>
<var name="${i}">14</var>
<status status="PASS" start="2026-04-13T03:03:38.065507" elapsed="0.137494"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:38.209115" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.208805" elapsed="0.000395"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:38.209250" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:38.209439" 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-04-13T03:03:38.208424" elapsed="0.001041"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.215864" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.215570" elapsed="0.000343"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.216311" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.216057" elapsed="0.000300"/>
</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-04-13T03:03:38.231931" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:38.232243" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:38.232677" 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-04-13T03:03:38.218433" elapsed="0.014306"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.216427" elapsed="0.016408"/>
</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-04-13T03:03:38.233222" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.232893" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.216407" elapsed="0.017053"/>
</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-04-13T03:03:38.241499" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.235784" elapsed="0.005830"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.235269" elapsed="0.006456"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.235225" elapsed="0.006558"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.244587" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.242197" elapsed="0.002457"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.241918" elapsed="0.002773"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.241877" elapsed="0.002839"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.245280" 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-04-13T03:03:38.244876" elapsed="0.000433"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.245620" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.245394" elapsed="0.000303"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.246177" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.245868" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.245722" elapsed="0.000516"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.245375" elapsed="0.000887"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.246800" 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-04-13T03:03:38.246411" elapsed="0.000416"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.247114" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.246898" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.247674" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.247348" elapsed="0.000354"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.247196" elapsed="0.000543"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.246879" elapsed="0.000881"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.247899" elapsed="0.000351"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:38.248785" 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-04-13T03:03:38.248412" 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-04-13T03:03:38.248956" elapsed="0.002221"/>
</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-04-13T03:03:38.234266" elapsed="0.016975"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:38.251429" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-13T03:03:38.251313" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.251294" elapsed="0.000222"/>
</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-04-13T03:03:38.251676" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:38.251750" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:38.254023" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:38.209822" elapsed="0.044230"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:38.254105" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.254259" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:38.207878" elapsed="0.046408"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.254753" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.254439" elapsed="0.000343"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.255742" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:38.255308" elapsed="0.000462"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:38.255819" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.255978" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:38.254984" elapsed="0.001020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.256405" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.256149" elapsed="0.000313"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.260202" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.256608" elapsed="0.003623"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:38.277309" elapsed="0.000725"/>
</kw>
<msg time="2026-04-13T03:03:38.278093" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.276949" elapsed="0.001203"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.276532" elapsed="0.001697"/>
</kw>
<msg time="2026-04-13T03:03:38.278272" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.268443" elapsed="0.009874"/>
</kw>
<msg time="2026-04-13T03:03:38.278422" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.268130" elapsed="0.010318"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.278881" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.278668" elapsed="0.000239"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:38.278957" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:38.279152" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:38.279206" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:38.203357" elapsed="0.075873"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.279645" level="INFO">15</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.279379" elapsed="0.000314"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:38.279917" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:38.279767" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.279746" elapsed="0.000236"/>
</if>
<var name="${i}">15</var>
<status status="PASS" start="2026-04-13T03:03:38.203158" elapsed="0.076850"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:38.286110" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.285803" elapsed="0.000335"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:38.286185" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:38.286336" 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-04-13T03:03:38.285429" elapsed="0.000932"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.292733" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.292466" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.293171" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.292919" elapsed="0.000296"/>
</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-04-13T03:03:38.310352" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:38.310493" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:38.310589" 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-04-13T03:03:38.295246" elapsed="0.015369"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.293285" elapsed="0.017403"/>
</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-04-13T03:03:38.310857" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.310716" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.293266" elapsed="0.017676"/>
</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-04-13T03:03:38.314447" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.311954" elapsed="0.002544"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.311739" elapsed="0.002793"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.311719" elapsed="0.002838"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.319928" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.314842" elapsed="0.005191"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.314614" elapsed="0.005498"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.314597" elapsed="0.005571"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.321515" 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-04-13T03:03:38.320505" elapsed="0.001094"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.322224" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.321878" elapsed="0.000415"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.322854" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.322498" elapsed="0.000383"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.322324" elapsed="0.000651"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.321821" elapsed="0.001177"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.323520" 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-04-13T03:03:38.323146" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.323855" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.323619" elapsed="0.000294"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.324375" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.324080" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.323938" elapsed="0.000500"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.323600" elapsed="0.000859"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.324600" elapsed="0.000370"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:38.325443" 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-04-13T03:03:38.325124" 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-04-13T03:03:38.325612" elapsed="0.002377"/>
</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-04-13T03:03:38.311296" elapsed="0.016759"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:38.328236" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-13T03:03:38.328127" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.328108" elapsed="0.000217"/>
</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-04-13T03:03:38.328459" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:38.328529" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:38.330757" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:38.286710" elapsed="0.044075"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:38.330838" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.330997" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:38.284880" elapsed="0.046142"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.331519" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.331189" elapsed="0.000358"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.332668" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:38.332123" elapsed="0.000574"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:38.332746" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.332903" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:38.331774" elapsed="0.001155"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.333324" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.333072" elapsed="0.000298"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.337046" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.333536" elapsed="0.003537"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:38.354246" elapsed="0.000689"/>
</kw>
<msg time="2026-04-13T03:03:38.354990" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.353902" elapsed="0.001144"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.353512" elapsed="0.001611"/>
</kw>
<msg time="2026-04-13T03:03:38.355167" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.345413" elapsed="0.009799"/>
</kw>
<msg time="2026-04-13T03:03:38.355316" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.345079" elapsed="0.010262"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.355705" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.355483" elapsed="0.000247"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:38.355778" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.355971" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:38.356026" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:38.280354" elapsed="0.075696"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.356444" level="INFO">16</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.356199" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:38.356715" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:38.356556" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.356537" elapsed="0.000246"/>
</if>
<var name="${i}">16</var>
<status status="PASS" start="2026-04-13T03:03:38.280154" elapsed="0.076653"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:38.363013" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.362707" elapsed="0.000333"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:38.363087" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.363236" 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-04-13T03:03:38.362354" elapsed="0.000906"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.369621" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.369329" elapsed="0.000353"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.370065" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.369823" elapsed="0.000286"/>
</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-04-13T03:03:38.386182" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:38.386446" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:38.386702" 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-04-13T03:03:38.372134" elapsed="0.014630"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.370177" elapsed="0.016682"/>
</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-04-13T03:03:38.387220" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.386915" elapsed="0.000448"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.370158" 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-04-13T03:03:38.394614" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.389699" elapsed="0.005033"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.389174" elapsed="0.005594"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.389131" elapsed="0.005662"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.397284" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.395061" elapsed="0.002272"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.394850" elapsed="0.002519"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.394834" elapsed="0.002561"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.398017" 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-04-13T03:03:38.397581" elapsed="0.000463"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.398335" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.398115" elapsed="0.000278"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.398885" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.398562" elapsed="0.000349"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.398417" elapsed="0.000529"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.398097" elapsed="0.000871"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.399478" 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-04-13T03:03:38.399112" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.399811" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.399575" elapsed="0.000296"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.400382" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.400054" elapsed="0.000355"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.399896" elapsed="0.000550"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.399557" elapsed="0.000910"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.400613" elapsed="0.000364"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:38.401419" 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-04-13T03:03:38.401128" 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-04-13T03:03:38.401612" elapsed="0.002460"/>
</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-04-13T03:03:38.388196" elapsed="0.015945"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:38.404323" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T03:03:38.404212" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.404193" elapsed="0.000224"/>
</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-04-13T03:03:38.404551" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:38.404622" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.407015" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:38.363579" elapsed="0.043465"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:38.407097" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:38.407259" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:38.361830" elapsed="0.045466"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.407769" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.407444" elapsed="0.000353"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.408758" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:38.408342" elapsed="0.000444"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:38.408892" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.409055" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:38.408013" elapsed="0.001069"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.409508" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.409224" elapsed="0.000335"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.413345" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.409752" elapsed="0.003622"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:38.430804" elapsed="0.000658"/>
</kw>
<msg time="2026-04-13T03:03:38.431515" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.430416" elapsed="0.001155"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.430009" elapsed="0.001666"/>
</kw>
<msg time="2026-04-13T03:03:38.431720" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.421746" elapsed="0.010019"/>
</kw>
<msg time="2026-04-13T03:03:38.431868" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.421366" elapsed="0.010527"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.432235" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.432034" elapsed="0.000226"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:38.432309" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:38.432497" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:38.432548" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:38.357149" elapsed="0.075423"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.432986" level="INFO">17</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.432742" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:38.433240" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:38.433098" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.433080" elapsed="0.000226"/>
</if>
<var name="${i}">17</var>
<status status="PASS" start="2026-04-13T03:03:38.356957" elapsed="0.076372"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:38.439613" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.439219" elapsed="0.000438"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:38.439706" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.439859" 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-04-13T03:03:38.438888" elapsed="0.000995"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.447188" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.446836" elapsed="0.000414"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.447755" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.447427" 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-04-13T03:03:38.464216" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:38.464676" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:38.464910" 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-04-13T03:03:38.450025" elapsed="0.014944"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.447890" elapsed="0.017183"/>
</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-04-13T03:03:38.465563" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.465155" elapsed="0.000614"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.447866" elapsed="0.017955"/>
</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-04-13T03:03:38.472383" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.468124" elapsed="0.004330"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.467619" elapsed="0.004885"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.467576" elapsed="0.004963"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.476089" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.472939" elapsed="0.003216"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.472620" elapsed="0.003584"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.472597" elapsed="0.003641"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.477033" 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-04-13T03:03:38.476460" elapsed="0.000610"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.477496" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.477169" elapsed="0.000419"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.478476" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.477849" elapsed="0.000685"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.477622" elapsed="0.000994"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.477144" elapsed="0.001551"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.479929" 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-04-13T03:03:38.479012" elapsed="0.000979"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.480686" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.480152" elapsed="0.000665"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.481942" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.481188" elapsed="0.000817"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.480870" elapsed="0.001178"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.480112" elapsed="0.001962"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.482224" elapsed="0.000349"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:38.483034" 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-04-13T03:03:38.482740" 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-04-13T03:03:38.483198" elapsed="0.002421"/>
</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-04-13T03:03:38.466615" elapsed="0.019086"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:38.485885" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T03:03:38.485773" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.485754" elapsed="0.000229"/>
</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-04-13T03:03:38.486118" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:38.486188" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:38.488376" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:38.440220" elapsed="0.048250"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:38.488526" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.488699" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:38.438334" elapsed="0.050391"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.489165" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.488870" elapsed="0.000322"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.490164" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:38.489760" elapsed="0.000432"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:38.490241" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.490399" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:38.489400" elapsed="0.001025"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.490841" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.490568" elapsed="0.000320"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.494581" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.491026" elapsed="0.003583"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:38.511756" elapsed="0.000653"/>
</kw>
<msg time="2026-04-13T03:03:38.512461" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.511395" elapsed="0.001122"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.511024" elapsed="0.001567"/>
</kw>
<msg time="2026-04-13T03:03:38.512648" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.502859" elapsed="0.009836"/>
</kw>
<msg time="2026-04-13T03:03:38.512799" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.502535" elapsed="0.010288"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.513164" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.512964" elapsed="0.000225"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:38.513237" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:38.513439" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:38.513506" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:38.433815" elapsed="0.079717"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.513960" level="INFO">18</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.513711" elapsed="0.000299"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:38.514220" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:38.514077" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.514059" elapsed="0.000226"/>
</if>
<var name="${i}">18</var>
<status status="PASS" start="2026-04-13T03:03:38.433599" elapsed="0.080710"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:38.520266" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.519970" elapsed="0.000361"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:38.520380" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:38.520530" 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-04-13T03:03:38.519623" elapsed="0.000932"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.527063" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.526743" elapsed="0.000374"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.527512" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.527265" 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-04-13T03:03:38.540235" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:38.540483" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:38.540706" 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-04-13T03:03:38.529653" elapsed="0.011104"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.527651" elapsed="0.013189"/>
</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-04-13T03:03:38.541109" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.540889" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.527613" elapsed="0.013616"/>
</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-04-13T03:03:38.546227" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.542719" elapsed="0.003576"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.542408" elapsed="0.003936"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.542380" elapsed="0.003998"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.549988" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.546771" elapsed="0.003277"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.546459" elapsed="0.003632"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.546435" elapsed="0.003685"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.550704" 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-04-13T03:03:38.550290" elapsed="0.000441"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.551019" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.550802" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.551545" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.551245" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.551100" elapsed="0.000506"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.550784" elapsed="0.000858"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.552143" 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-04-13T03:03:38.551784" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.552450" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.552239" elapsed="0.000269"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.552992" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.552698" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.552540" elapsed="0.000512"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.552221" elapsed="0.000851"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.553209" elapsed="0.000357"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:38.554101" 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-04-13T03:03:38.553744" 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-04-13T03:03:38.554269" elapsed="0.002408"/>
</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-04-13T03:03:38.541797" elapsed="0.014948"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:38.556928" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T03:03:38.556816" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.556797" elapsed="0.000225"/>
</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-04-13T03:03:38.557156" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:38.557225" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:38.559480" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:38.520887" elapsed="0.038622"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:38.559560" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:38.559729" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:38.519097" elapsed="0.040658"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.560194" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.559900" elapsed="0.000321"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.561200" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:38.560794" elapsed="0.000434"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:38.561276" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:38.561434" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:38.560435" elapsed="0.001025"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.561885" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.561616" elapsed="0.000315"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.565667" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.562070" elapsed="0.003626"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:38.583480" elapsed="0.000742"/>
</kw>
<msg time="2026-04-13T03:03:38.584290" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.583133" elapsed="0.001221"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.582752" elapsed="0.001682"/>
</kw>
<msg time="2026-04-13T03:03:38.584478" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.574305" elapsed="0.010217"/>
</kw>
<msg time="2026-04-13T03:03:38.584668" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.573840" elapsed="0.010856"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.585154" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.584931" elapsed="0.000250"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:38.585235" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T03:03:38.585450" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:38.585504" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:38.514664" elapsed="0.070888"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.585976" level="INFO">19</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.585722" elapsed="0.000302"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:38.586255" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:38.586103" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.586081" elapsed="0.000243"/>
</if>
<var name="${i}">19</var>
<status status="PASS" start="2026-04-13T03:03:38.514456" elapsed="0.071894"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:38.594924" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.594414" elapsed="0.000555"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:38.595045" elapsed="0.000054"/>
</return>
<msg time="2026-04-13T03:03:38.595292" 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-04-13T03:03:38.593912" elapsed="0.001420"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.602100" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.601829" elapsed="0.000319"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.602538" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.602289" elapsed="0.000293"/>
</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-04-13T03:03:38.617715" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:38.618111" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:38.618357" 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-04-13T03:03:38.604715" elapsed="0.013703"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.602673" elapsed="0.015848"/>
</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-04-13T03:03:38.618965" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.618586" elapsed="0.000531"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.602651" elapsed="0.016514"/>
</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-04-13T03:03:38.627041" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.621721" elapsed="0.005392"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.621135" elapsed="0.006026"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.621082" elapsed="0.006113"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.630836" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.627571" elapsed="0.003332"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.627275" elapsed="0.003676"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.627252" elapsed="0.003734"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.631777" 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-04-13T03:03:38.631206" elapsed="0.000608"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.632242" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.631911" elapsed="0.000413"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.633022" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.632560" elapsed="0.000499"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.632358" elapsed="0.000834"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.631886" elapsed="0.001339"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.634053" 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-04-13T03:03:38.633428" elapsed="0.000660"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.634387" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.634163" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.634942" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.634615" elapsed="0.000354"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.634471" elapsed="0.000535"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.634144" elapsed="0.000884"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.635171" elapsed="0.000413"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:38.636077" 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-04-13T03:03:38.635755" 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-04-13T03:03:38.636247" elapsed="0.003943"/>
</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-04-13T03:03:38.620038" elapsed="0.020221"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:38.640455" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T03:03:38.640338" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.640317" elapsed="0.000236"/>
</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-04-13T03:03:38.640708" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:38.640780" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:38.643044" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:38.595760" elapsed="0.047312"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:38.643124" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:38.643275" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:38.593020" elapsed="0.050281"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.643779" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.643445" elapsed="0.000362"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.644839" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:38.644396" elapsed="0.000471"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:38.644917" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:38.645086" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:38.644040" elapsed="0.001073"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.645533" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.645258" elapsed="0.000342"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.649352" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.645755" elapsed="0.003625"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:38.667175" elapsed="0.000794"/>
</kw>
<msg time="2026-04-13T03:03:38.668040" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.666796" elapsed="0.001308"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.666329" elapsed="0.001856"/>
</kw>
<msg time="2026-04-13T03:03:38.668232" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.657907" elapsed="0.010370"/>
</kw>
<msg time="2026-04-13T03:03:38.668388" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.657519" elapsed="0.010896"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.668841" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.668594" elapsed="0.000273"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:38.668920" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:03:38.669126" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:38.669182" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:38.586730" elapsed="0.082478"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.669816" level="INFO">20</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.669362" elapsed="0.000505"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:38.670102" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:38.669947" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.669924" elapsed="0.000248"/>
</if>
<var name="${i}">20</var>
<status status="PASS" start="2026-04-13T03:03:38.586502" elapsed="0.083695"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:38.676499" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.676190" elapsed="0.000336"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:38.676573" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.676753" 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-04-13T03:03:38.675858" elapsed="0.000921"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.683207" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.682953" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.683656" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.683394" elapsed="0.000309"/>
</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-04-13T03:03:38.699142" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:38.699335" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:38.699472" 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-04-13T03:03:38.685787" elapsed="0.013721"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.683772" elapsed="0.015797"/>
</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-04-13T03:03:38.699826" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.699604" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.683752" elapsed="0.016194"/>
</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-04-13T03:03:38.706688" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.701369" elapsed="0.005575"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.701070" elapsed="0.005954"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.701043" elapsed="0.006038"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.711269" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.707713" elapsed="0.003603"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.707207" elapsed="0.004144"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.707169" elapsed="0.004207"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.711945" 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-04-13T03:03:38.711534" elapsed="0.000438"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.712262" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.712043" elapsed="0.000277"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.712818" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.712488" elapsed="0.000356"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.712344" elapsed="0.000536"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.712025" elapsed="0.000876"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.713407" 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-04-13T03:03:38.713046" elapsed="0.000387"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.713753" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.713503" elapsed="0.000309"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.714270" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.713977" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.713836" elapsed="0.000496"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.713485" elapsed="0.000867"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.714487" elapsed="0.000357"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:38.715286" 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-04-13T03:03:38.714993" 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-04-13T03:03:38.715449" elapsed="0.002378"/>
</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-04-13T03:03:38.700453" elapsed="0.017438"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:38.718069" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-13T03:03:38.717962" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.717943" elapsed="0.000214"/>
</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-04-13T03:03:38.718289" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:38.718360" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T03:03:38.720557" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:38.677108" elapsed="0.043478"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:38.720651" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.720805" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:38.675172" elapsed="0.045658"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.721261" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.720974" elapsed="0.000314"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.722246" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:38.721847" elapsed="0.000427"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:38.722359" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.722520" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:38.721485" elapsed="0.001062"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.722967" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.722711" elapsed="0.000302"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.726707" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.723150" elapsed="0.003586"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:38.744159" elapsed="0.000703"/>
</kw>
<msg time="2026-04-13T03:03:38.744917" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.743806" elapsed="0.001170"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.743416" elapsed="0.001636"/>
</kw>
<msg time="2026-04-13T03:03:38.745095" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.735079" elapsed="0.010060"/>
</kw>
<msg time="2026-04-13T03:03:38.745242" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.734735" elapsed="0.010531"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.745650" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.745409" elapsed="0.000270"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:38.745730" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T03:03:38.745927" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:38.745985" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:38.670552" elapsed="0.075459"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.746407" level="INFO">21</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.746161" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:38.746690" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:38.746527" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.746507" elapsed="0.000251"/>
</if>
<var name="${i}">21</var>
<status status="PASS" start="2026-04-13T03:03:38.670348" elapsed="0.076433"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:38.752862" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.752529" elapsed="0.000360"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:38.752936" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.753085" 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-04-13T03:03:38.752198" elapsed="0.000912"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.759436" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.759187" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.759876" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.759618" elapsed="0.000300"/>
</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-04-13T03:03:38.774358" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:38.774549" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:38.774670" 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-04-13T03:03:38.762036" elapsed="0.012661"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.759986" elapsed="0.014755"/>
</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-04-13T03:03:38.774905" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.774766" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.759967" elapsed="0.015023"/>
</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-04-13T03:03:38.778684" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.775990" elapsed="0.002764"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.775777" elapsed="0.003026"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.775758" elapsed="0.003080"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.782347" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.779212" elapsed="0.003200"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.778918" elapsed="0.003542"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.778895" elapsed="0.003600"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.783262" 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-04-13T03:03:38.782733" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.783729" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.783397" elapsed="0.000415"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.784492" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.784062" elapsed="0.000467"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.783845" elapsed="0.000733"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.783372" elapsed="0.001236"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.785331" 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-04-13T03:03:38.784831" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.785833" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.785466" elapsed="0.000451"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.786453" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.786148" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.785957" elapsed="0.000557"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.785441" elapsed="0.001094"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.786693" elapsed="0.000345"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:38.787479" 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-04-13T03:03:38.787189" elapsed="0.000315"/>
</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-04-13T03:03:38.787657" elapsed="0.002400"/>
</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-04-13T03:03:38.775338" elapsed="0.014783"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:38.790298" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-13T03:03:38.790191" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.790172" elapsed="0.000214"/>
</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-04-13T03:03:38.790519" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:38.790588" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:38.792810" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:38.753426" elapsed="0.039453"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:38.792933" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.793087" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:38.751665" elapsed="0.041448"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.793546" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.793257" elapsed="0.000316"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.794546" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:38.794146" elapsed="0.000428"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:38.794623" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T03:03:38.794798" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:38.793822" elapsed="0.001002"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.795222" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.794969" elapsed="0.000299"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.798960" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.795404" elapsed="0.003584"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:38.817088" elapsed="0.000796"/>
</kw>
<msg time="2026-04-13T03:03:38.818019" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.816711" elapsed="0.001380"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.816221" elapsed="0.001949"/>
</kw>
<msg time="2026-04-13T03:03:38.818216" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.807242" elapsed="0.011019"/>
</kw>
<msg time="2026-04-13T03:03:38.818373" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.806925" elapsed="0.011473"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.818779" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.818545" elapsed="0.000260"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:38.818857" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T03:03:38.819062" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:38.819116" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:38.747133" elapsed="0.072008"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.819543" level="INFO">22</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.819291" elapsed="0.000299"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:38.819833" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:38.819683" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.819660" elapsed="0.000240"/>
</if>
<var name="${i}">22</var>
<status status="PASS" start="2026-04-13T03:03:38.746927" elapsed="0.072998"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:38.826034" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.825729" elapsed="0.000424"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:38.826203" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:38.826355" 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-04-13T03:03:38.825358" elapsed="0.001021"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.832705" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.832438" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.833130" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.832889" elapsed="0.000284"/>
</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-04-13T03:03:38.849256" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:38.849451" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:38.849594" 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-04-13T03:03:38.835212" elapsed="0.014450"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.833242" elapsed="0.016526"/>
</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-04-13T03:03:38.850067" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.849808" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.833223" elapsed="0.017047"/>
</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-04-13T03:03:38.858348" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.852765" elapsed="0.005637"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.852233" elapsed="0.006204"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.852184" elapsed="0.006279"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.861030" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.858757" elapsed="0.002320"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.858524" elapsed="0.002587"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.858506" elapsed="0.002630"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.861773" 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-04-13T03:03:38.861320" elapsed="0.000480"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.862096" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.861870" elapsed="0.000284"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.862622" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.862322" elapsed="0.000343"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.862178" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.861852" elapsed="0.000870"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.863225" 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-04-13T03:03:38.862863" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.863533" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.863319" elapsed="0.000271"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.864070" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.863772" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.863613" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.863301" elapsed="0.000849"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.864291" elapsed="0.000373"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:38.865188" 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-04-13T03:03:38.864816" 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-04-13T03:03:38.865355" elapsed="0.002473"/>
</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-04-13T03:03:38.851162" elapsed="0.016736"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:38.868086" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-13T03:03:38.867972" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.867951" elapsed="0.000234"/>
</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-04-13T03:03:38.868323" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:38.868394" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:38.870674" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:38.826719" elapsed="0.043985"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:38.870760" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T03:03:38.870921" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:38.824820" elapsed="0.046128"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.871428" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.871101" elapsed="0.000355"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.872513" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:38.872076" elapsed="0.000464"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:38.872587" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.872765" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:38.871700" elapsed="0.001091"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.873190" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.872935" elapsed="0.000301"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.876954" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.873372" elapsed="0.003611"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:38.894331" elapsed="0.000741"/>
</kw>
<msg time="2026-04-13T03:03:38.895139" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.893958" elapsed="0.001248"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.893534" elapsed="0.001751"/>
</kw>
<msg time="2026-04-13T03:03:38.895329" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.885320" elapsed="0.010054"/>
</kw>
<msg time="2026-04-13T03:03:38.895482" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.884929" elapsed="0.010577"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.895973" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.895751" elapsed="0.000251"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:38.896054" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T03:03:38.896257" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:38.896310" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:38.820296" elapsed="0.076039"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.896753" level="INFO">23</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.896484" elapsed="0.000316"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:38.897039" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:38.896881" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.896859" elapsed="0.000251"/>
</if>
<var name="${i}">23</var>
<status status="PASS" start="2026-04-13T03:03:38.820088" elapsed="0.077049"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:38.903221" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.902920" elapsed="0.000328"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:38.903293" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.903441" 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-04-13T03:03:38.902560" elapsed="0.000906"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.909835" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.909553" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.910260" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.910019" elapsed="0.000284"/>
</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-04-13T03:03:38.926473" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:38.926676" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:38.926811" 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-04-13T03:03:38.912335" elapsed="0.014506"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.910373" elapsed="0.016522"/>
</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-04-13T03:03:38.927123" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.926929" elapsed="0.000261"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.910353" elapsed="0.016859"/>
</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-04-13T03:03:38.932347" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.928328" elapsed="0.004132"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.928101" elapsed="0.004436"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.928080" elapsed="0.004513"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.938239" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.933217" elapsed="0.005079"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.932752" elapsed="0.005586"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.932714" elapsed="0.005652"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.939022" 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-04-13T03:03:38.938558" elapsed="0.000491"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.939349" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.939124" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.939906" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.939577" elapsed="0.000355"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.939431" elapsed="0.000612"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.939105" elapsed="0.000960"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.940576" 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-04-13T03:03:38.940209" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:38.940910" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:38.940692" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.941429" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.941134" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.940992" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.940673" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.941671" elapsed="0.000371"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:38.942491" 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-04-13T03:03:38.942193" elapsed="0.000324"/>
</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-04-13T03:03:38.942683" elapsed="0.002433"/>
</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-04-13T03:03:38.927610" elapsed="0.017575"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:38.945367" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-13T03:03:38.945258" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.945239" elapsed="0.000225"/>
</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-04-13T03:03:38.945597" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:38.945684" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:38.947969" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:38.903814" elapsed="0.044183"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:38.948049" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:38.948202" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:38.902027" elapsed="0.046201"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.948684" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.948372" elapsed="0.000340"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.949823" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:38.949277" elapsed="0.000574"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:38.949900" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.950064" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:38.948934" elapsed="0.001156"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.950498" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.950241" elapsed="0.000315"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.954333" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.950729" elapsed="0.003632"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:38.971722" elapsed="0.000667"/>
</kw>
<msg time="2026-04-13T03:03:38.972454" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.971359" elapsed="0.001166"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.970980" elapsed="0.001679"/>
</kw>
<msg time="2026-04-13T03:03:38.972717" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:38.962748" elapsed="0.010034"/>
</kw>
<msg time="2026-04-13T03:03:38.972891" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:38.962421" elapsed="0.010495"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:38.973262" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:38.973059" elapsed="0.000228"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:38.973334" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:38.973526" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:38.973577" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:38.897517" elapsed="0.076084"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.974039" level="INFO">24</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.973786" elapsed="0.000299"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:38.974302" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:38.974156" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.974136" elapsed="0.000232"/>
</if>
<var name="${i}">24</var>
<status status="PASS" start="2026-04-13T03:03:38.897304" elapsed="0.077087"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:38.980387" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:38.980087" elapsed="0.000327"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:38.980461" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:38.980610" 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-04-13T03:03:38.979758" elapsed="0.000904"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.987042" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.986788" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:38.987471" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:38.987223" 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-04-13T03:03:39.002400" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:39.002761" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:39.003021" 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-04-13T03:03:38.989516" elapsed="0.013570"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:38.987581" elapsed="0.015615"/>
</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-04-13T03:03:39.003667" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.003262" elapsed="0.000563"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:38.987562" elapsed="0.016314"/>
</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-04-13T03:03:39.010903" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.006312" elapsed="0.004727"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.005834" elapsed="0.005246"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.005790" elapsed="0.005318"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.013694" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.011402" elapsed="0.002373"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.011173" elapsed="0.002647"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.011153" elapsed="0.002696"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.014431" 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-04-13T03:03:39.014023" elapsed="0.000435"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.014776" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.014531" elapsed="0.000304"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.015305" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.015004" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.014860" elapsed="0.000506"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.014512" elapsed="0.000875"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.015916" 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-04-13T03:03:39.015528" elapsed="0.000414"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.016227" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.016013" elapsed="0.000271"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.016766" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.016451" elapsed="0.000342"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.016308" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.015995" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.016988" elapsed="0.000345"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:39.017825" 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-04-13T03:03:39.017483" 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-04-13T03:03:39.017992" elapsed="0.002493"/>
</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-04-13T03:03:39.004780" elapsed="0.015776"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:39.020760" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T03:03:39.020645" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.020610" 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-04-13T03:03:39.020993" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:39.021063" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T03:03:39.023387" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:38.981002" elapsed="0.042414"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:39.023469" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:39.023639" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:38.979208" elapsed="0.044459"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.024151" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.023819" elapsed="0.000360"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.025240" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:39.024821" elapsed="0.000448"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:39.025399" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T03:03:39.025566" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:39.024433" elapsed="0.001160"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.026063" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.025755" elapsed="0.000355"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.029915" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.026249" elapsed="0.003695"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:39.047272" elapsed="0.000725"/>
</kw>
<msg time="2026-04-13T03:03:39.048052" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.046914" elapsed="0.001196"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.046508" elapsed="0.001678"/>
</kw>
<msg time="2026-04-13T03:03:39.048228" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.038227" elapsed="0.010046"/>
</kw>
<msg time="2026-04-13T03:03:39.048374" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.037909" elapsed="0.010490"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.048762" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.048540" elapsed="0.000247"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:39.048835" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:39.049023" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:39.049074" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:38.974750" elapsed="0.074350"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.049495" level="INFO">25</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.049250" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:39.049804" elapsed="0.000021"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:39.049617" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.049596" elapsed="0.000284"/>
</if>
<var name="${i}">25</var>
<status status="PASS" start="2026-04-13T03:03:38.974537" elapsed="0.075370"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:39.055974" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.055672" elapsed="0.000332"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:39.056051" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:39.056198" 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-04-13T03:03:39.055318" elapsed="0.000904"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.062813" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.062514" elapsed="0.000346"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.063307" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.063005" elapsed="0.000347"/>
</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-04-13T03:03:39.078566" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:39.078796" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:39.078904" 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-04-13T03:03:39.065366" elapsed="0.013564"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.063423" elapsed="0.015571"/>
</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-04-13T03:03:39.079572" elapsed="0.000085"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.079079" elapsed="0.000681"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.063402" elapsed="0.016423"/>
</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-04-13T03:03:39.087682" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.082268" elapsed="0.005466"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.081692" elapsed="0.006076"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.081617" elapsed="0.006178"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.090354" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.088071" elapsed="0.002329"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.087862" elapsed="0.002579"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.087844" elapsed="0.002627"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.091075" 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-04-13T03:03:39.090662" elapsed="0.000439"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.091389" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.091171" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.091934" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.091616" elapsed="0.000343"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.091472" elapsed="0.000523"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.091153" elapsed="0.000863"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.092512" 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-04-13T03:03:39.092156" elapsed="0.000383"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.092837" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.092607" elapsed="0.000286"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.093348" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.093056" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.092917" elapsed="0.000491"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.092590" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.093564" elapsed="0.000385"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:39.094397" 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-04-13T03:03:39.094097" elapsed="0.000326"/>
</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-04-13T03:03:39.094558" elapsed="0.003672"/>
</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-04-13T03:03:39.080656" elapsed="0.017640"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:39.098476" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-13T03:03:39.098368" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.098349" elapsed="0.000217"/>
</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-04-13T03:03:39.098722" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:39.098794" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T03:03:39.100997" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:39.056543" elapsed="0.044526"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:39.101122" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:03:39.101272" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:39.054786" elapsed="0.046511"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.101750" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.101439" elapsed="0.000338"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.102749" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:39.102334" elapsed="0.000444"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:39.102827" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:39.102985" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:39.102010" elapsed="0.001001"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.103406" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.103152" elapsed="0.000301"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.107227" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.103588" elapsed="0.003667"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:39.124754" elapsed="0.000714"/>
</kw>
<msg time="2026-04-13T03:03:39.125535" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.124378" elapsed="0.001221"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.123978" elapsed="0.001741"/>
</kw>
<msg time="2026-04-13T03:03:39.125764" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.115857" elapsed="0.009982"/>
</kw>
<msg time="2026-04-13T03:03:39.125951" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.115487" elapsed="0.010489"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.126337" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.126122" elapsed="0.000240"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:39.126413" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:03:39.126614" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:39.126686" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:39.050263" elapsed="0.076449"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.127125" level="INFO">26</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.126871" elapsed="0.000300"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:39.127403" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:39.127251" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.127229" elapsed="0.000243"/>
</if>
<var name="${i}">26</var>
<status status="PASS" start="2026-04-13T03:03:39.050071" elapsed="0.077426"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:39.133754" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.133437" elapsed="0.000437"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:39.133926" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:39.134078" 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-04-13T03:03:39.132953" elapsed="0.001149"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.140575" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.140313" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.141019" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.140777" elapsed="0.000285"/>
</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-04-13T03:03:39.155275" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:39.155424" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:39.155529" 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-04-13T03:03:39.143126" elapsed="0.012429"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.141143" elapsed="0.014458"/>
</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-04-13T03:03:39.155806" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.155655" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.141121" elapsed="0.014771"/>
</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-04-13T03:03:39.163919" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.158222" elapsed="0.005810"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.157717" elapsed="0.006393"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.157668" elapsed="0.006497"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.168324" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.164791" elapsed="0.003583"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.164292" elapsed="0.004123"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.164254" elapsed="0.004186"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.169026" 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-04-13T03:03:39.168611" elapsed="0.000442"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.169340" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.169123" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.169913" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.169566" elapsed="0.000373"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.169422" elapsed="0.000554"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.169105" elapsed="0.000895"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.170526" 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-04-13T03:03:39.170142" elapsed="0.000418"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.170887" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.170664" elapsed="0.000282"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.171406" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.171112" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.170970" elapsed="0.000498"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.170620" elapsed="0.000868"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.171641" elapsed="0.000349"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:39.172502" 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-04-13T03:03:39.172141" elapsed="0.000388"/>
</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-04-13T03:03:39.172686" elapsed="0.002381"/>
</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-04-13T03:03:39.156583" elapsed="0.018549"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:39.175346" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T03:03:39.175222" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.175197" 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-04-13T03:03:39.175577" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:39.175665" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:39.177910" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:39.134425" elapsed="0.043515"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:39.177992" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:39.178146" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:39.132383" elapsed="0.045789"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.178610" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.178317" elapsed="0.000337"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.179587" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:39.179191" elapsed="0.000424"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:39.179678" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:39.179838" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:39.178862" elapsed="0.001002"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.180268" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.180015" elapsed="0.000300"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.184040" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.180454" elapsed="0.003614"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:39.201427" elapsed="0.000695"/>
</kw>
<msg time="2026-04-13T03:03:39.202174" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.201084" elapsed="0.001145"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.200708" elapsed="0.001596"/>
</kw>
<msg time="2026-04-13T03:03:39.202348" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.192372" elapsed="0.010020"/>
</kw>
<msg time="2026-04-13T03:03:39.202494" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.192020" elapsed="0.010498"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.202927" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.202721" elapsed="0.000232"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:39.203001" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:39.203192" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:39.203243" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:39.127880" elapsed="0.075387"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.203682" level="INFO">27</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.203415" elapsed="0.000313"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:39.203941" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:39.203797" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.203778" elapsed="0.000232"/>
</if>
<var name="${i}">27</var>
<status status="PASS" start="2026-04-13T03:03:39.127669" elapsed="0.076367"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:39.210048" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.209714" elapsed="0.000361"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:39.210121" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:39.210269" 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-04-13T03:03:39.209338" elapsed="0.000955"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.216721" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.216456" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.217148" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.216905" elapsed="0.000286"/>
</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-04-13T03:03:39.233531" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:39.233698" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:39.233808" 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-04-13T03:03:39.219311" elapsed="0.014524"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.217258" elapsed="0.016643"/>
</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-04-13T03:03:39.234139" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.233931" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.217239" elapsed="0.017021"/>
</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-04-13T03:03:39.239351" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.235708" elapsed="0.003713"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.235395" elapsed="0.004072"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.235367" elapsed="0.004135"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.243188" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.239901" elapsed="0.003334"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.239581" elapsed="0.003688"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.239557" elapsed="0.003737"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.243991" 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-04-13T03:03:39.243451" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.244308" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.244088" elapsed="0.000277"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.244960" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.244534" elapsed="0.000455"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.244389" elapsed="0.000697"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.244070" elapsed="0.001039"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.245624" 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-04-13T03:03:39.245256" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.245971" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.245739" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.246492" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.246199" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.246055" elapsed="0.000498"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.245720" elapsed="0.000854"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.246740" elapsed="0.000348"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:39.247526" 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-04-13T03:03:39.247237" elapsed="0.000315"/>
</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-04-13T03:03:39.247715" elapsed="0.002376"/>
</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-04-13T03:03:39.234785" elapsed="0.015369"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:39.250335" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-13T03:03:39.250226" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.250207" 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-04-13T03:03:39.250562" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:39.250657" elapsed="0.000018"/>
</return>
<msg time="2026-04-13T03:03:39.252851" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:39.210683" elapsed="0.042196"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:39.252930" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:39.253081" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:39.208812" elapsed="0.044295"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.253540" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.253250" elapsed="0.000317"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.254513" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:39.254118" elapsed="0.000423"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:39.254589" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:39.254763" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:39.253782" elapsed="0.001007"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.255190" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.254934" elapsed="0.000302"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.258951" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.255372" elapsed="0.003607"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:39.276360" elapsed="0.000681"/>
</kw>
<msg time="2026-04-13T03:03:39.277092" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.276015" elapsed="0.001131"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.275621" elapsed="0.001599"/>
</kw>
<msg time="2026-04-13T03:03:39.277264" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.267323" elapsed="0.009986"/>
</kw>
<msg time="2026-04-13T03:03:39.277413" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.266964" elapsed="0.010473"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.277798" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.277577" elapsed="0.000246"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:39.277870" elapsed="0.000040"/>
</return>
<msg time="2026-04-13T03:03:39.278070" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:39.278121" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:39.204371" elapsed="0.073774"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.278540" level="INFO">28</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.278296" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:39.278810" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:39.278667" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.278648" elapsed="0.000230"/>
</if>
<var name="${i}">28</var>
<status status="PASS" start="2026-04-13T03:03:39.204182" elapsed="0.074719"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:39.284954" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.284654" elapsed="0.000327"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:39.285027" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:39.285174" 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-04-13T03:03:39.284300" elapsed="0.000898"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.291615" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.291362" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.292058" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.291815" elapsed="0.000286"/>
</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-04-13T03:03:39.307237" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:39.307469" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:39.307655" 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-04-13T03:03:39.294145" elapsed="0.013551"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.292168" elapsed="0.015592"/>
</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-04-13T03:03:39.308029" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.307799" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.292149" elapsed="0.016005"/>
</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-04-13T03:03:39.313511" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.309675" elapsed="0.004013"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.309335" elapsed="0.004405"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.309306" elapsed="0.004469"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.317493" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.314191" elapsed="0.003408"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.313855" elapsed="0.003823"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.313831" elapsed="0.003885"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.318689" 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-04-13T03:03:39.318027" elapsed="0.000711"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.319122" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.318844" elapsed="0.000337"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.319685" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.319352" elapsed="0.000363"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.319207" elapsed="0.000556"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.318816" elapsed="0.000976"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.320389" 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-04-13T03:03:39.319972" elapsed="0.000445"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.320755" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.320490" elapsed="0.000332"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.321299" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.320997" elapsed="0.000329"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.320847" elapsed="0.000515"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.320471" elapsed="0.000912"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.321528" elapsed="0.000434"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:39.322422" 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-04-13T03:03:39.322120" elapsed="0.000328"/>
</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-04-13T03:03:39.322585" elapsed="0.002665"/>
</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-04-13T03:03:39.308691" elapsed="0.016647"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:39.325589" elapsed="0.000070"/>
</return>
<status status="PASS" start="2026-04-13T03:03:39.325442" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.325406" elapsed="0.000335"/>
</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-04-13T03:03:39.325894" elapsed="0.000077"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:39.326038" elapsed="0.000017"/>
</return>
<msg time="2026-04-13T03:03:39.328343" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:39.285515" elapsed="0.042857"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:39.328428" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:39.328585" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:39.283774" elapsed="0.044838"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.329167" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.328779" elapsed="0.000420"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.330310" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:39.329794" elapsed="0.000545"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:39.330488" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T03:03:39.330706" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:39.329425" elapsed="0.001311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.331151" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.330885" elapsed="0.000314"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.335209" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.331339" elapsed="0.003901"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:39.353370" elapsed="0.000790"/>
</kw>
<msg time="2026-04-13T03:03:39.354230" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.353021" elapsed="0.001276"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.352606" elapsed="0.001769"/>
</kw>
<msg time="2026-04-13T03:03:39.354420" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.344365" elapsed="0.010104"/>
</kw>
<msg time="2026-04-13T03:03:39.354575" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.343939" elapsed="0.010661"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.354978" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.354765" elapsed="0.000238"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:39.355057" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:03:39.355256" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:39.355309" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:39.279231" elapsed="0.076104"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.355754" level="INFO">29</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.355489" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:39.356033" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:39.355881" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.355859" elapsed="0.000242"/>
</if>
<var name="${i}">29</var>
<status status="PASS" start="2026-04-13T03:03:39.279042" elapsed="0.077083"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:39.362368" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.362050" elapsed="0.000345"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:39.362444" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:39.362592" 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-04-13T03:03:39.361686" elapsed="0.000930"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.369176" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.368922" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.369610" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.369360" elapsed="0.000311"/>
</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-04-13T03:03:39.384485" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:39.384807" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:39.384952" 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-04-13T03:03:39.371730" elapsed="0.013260"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.369742" elapsed="0.015309"/>
</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-04-13T03:03:39.385293" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.385088" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.369722" elapsed="0.015692"/>
</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-04-13T03:03:39.393819" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.387022" elapsed="0.006925"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.386676" elapsed="0.007417"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.386645" elapsed="0.007507"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.397228" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.394800" elapsed="0.002483"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.394284" elapsed="0.003035"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.394244" elapsed="0.003100"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.398002" 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-04-13T03:03:39.397509" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.398393" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.398147" elapsed="0.000306"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.398947" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.398622" elapsed="0.000351"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.398477" elapsed="0.000533"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.398122" elapsed="0.000909"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.399559" 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-04-13T03:03:39.399171" elapsed="0.000415"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.399893" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.399675" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.400440" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.400135" elapsed="0.000332"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.399978" elapsed="0.000525"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.399656" elapsed="0.000868"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.400687" elapsed="0.000354"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:39.401526" 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-04-13T03:03:39.401194" 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-04-13T03:03:39.401715" elapsed="0.002519"/>
</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-04-13T03:03:39.386009" elapsed="0.018293"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:39.404514" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T03:03:39.404388" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.404364" 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-04-13T03:03:39.404785" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:39.404856" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:39.407330" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:39.362974" elapsed="0.044437"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:39.407468" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:39.407651" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:39.361124" elapsed="0.046558"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.408214" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.407851" elapsed="0.000392"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.409267" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:39.408860" elapsed="0.000436"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:39.409360" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:39.409524" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:39.408497" elapsed="0.001055"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.410068" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.409731" elapsed="0.000385"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.414231" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.410257" elapsed="0.004004"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:39.431951" elapsed="0.000730"/>
</kw>
<msg time="2026-04-13T03:03:39.432741" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.431549" elapsed="0.001254"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.431149" elapsed="0.001732"/>
</kw>
<msg time="2026-04-13T03:03:39.432926" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.422725" elapsed="0.010247"/>
</kw>
<msg time="2026-04-13T03:03:39.433077" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.422385" elapsed="0.010718"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.433519" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.433247" elapsed="0.000298"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:39.433595" elapsed="0.000047"/>
</return>
<msg time="2026-04-13T03:03:39.433810" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:39.433863" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:39.356487" elapsed="0.077401"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.434328" level="INFO">30</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.434077" elapsed="0.000298"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:39.434603" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:39.434453" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.434432" elapsed="0.000282"/>
</if>
<var name="${i}">30</var>
<status status="PASS" start="2026-04-13T03:03:39.356277" elapsed="0.078463"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:39.442136" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.441532" elapsed="0.000740"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:39.442357" elapsed="0.000053"/>
</return>
<msg time="2026-04-13T03:03:39.442589" 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-04-13T03:03:39.441048" elapsed="0.001577"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.450815" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.450471" elapsed="0.000398"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.451286" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.451014" elapsed="0.000318"/>
</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-04-13T03:03:39.468387" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:39.468764" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:39.469026" 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-04-13T03:03:39.453504" elapsed="0.015718"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.451418" elapsed="0.017917"/>
</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-04-13T03:03:39.469882" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.469458" elapsed="0.000615"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.451392" elapsed="0.018731"/>
</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-04-13T03:03:39.476977" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.472604" elapsed="0.004442"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.472100" elapsed="0.004989"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.472053" elapsed="0.005064"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.479812" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.477421" elapsed="0.002442"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.477185" elapsed="0.002713"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.477165" elapsed="0.002759"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.480557" 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-04-13T03:03:39.480122" elapsed="0.000463"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.480907" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.480681" elapsed="0.000285"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.481463" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.481154" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.480991" elapsed="0.000534"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.480660" elapsed="0.000887"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.482119" 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-04-13T03:03:39.481707" elapsed="0.000440"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.482462" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.482230" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.483013" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.482712" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.482545" elapsed="0.000531"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.482207" elapsed="0.000891"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.483241" elapsed="0.000351"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:39.484147" 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-04-13T03:03:39.483763" elapsed="0.000412"/>
</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-04-13T03:03:39.484319" elapsed="0.002482"/>
</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-04-13T03:03:39.471001" elapsed="0.015870"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:39.487056" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-13T03:03:39.486944" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.486924" elapsed="0.000229"/>
</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-04-13T03:03:39.487288" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:39.487358" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:39.489721" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:39.443115" elapsed="0.046636"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:39.489805" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:39.489959" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:39.440137" elapsed="0.049848"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.490475" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.490166" elapsed="0.000337"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.491566" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:39.491130" elapsed="0.000465"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:39.491660" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:39.491821" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:39.490747" elapsed="0.001101"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.492278" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.492005" elapsed="0.000322"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.496122" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.492471" elapsed="0.003680"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:39.514840" elapsed="0.000737"/>
</kw>
<msg time="2026-04-13T03:03:39.515673" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.514412" elapsed="0.001331"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.513869" elapsed="0.001954"/>
</kw>
<msg time="2026-04-13T03:03:39.515870" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.504818" elapsed="0.011098"/>
</kw>
<msg time="2026-04-13T03:03:39.516039" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.504403" elapsed="0.011664"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.516536" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.516310" elapsed="0.000253"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:39.516618" elapsed="0.000081"/>
</return>
<msg time="2026-04-13T03:03:39.516873" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:39.516933" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:39.435103" elapsed="0.081856"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.517372" level="INFO">31</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.517109" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:39.517681" elapsed="0.000020"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:39.517504" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.517480" elapsed="0.000273"/>
</if>
<var name="${i}">31</var>
<status status="PASS" start="2026-04-13T03:03:39.434897" elapsed="0.082882"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:39.524092" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.523770" elapsed="0.000350"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:39.524168" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:39.524343" 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-04-13T03:03:39.523382" elapsed="0.000986"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.530784" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.530503" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.531214" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.530970" 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-04-13T03:03:39.547921" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:39.548266" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:39.548554" 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-04-13T03:03:39.533300" elapsed="0.015321"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.531331" elapsed="0.017448"/>
</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-04-13T03:03:39.549263" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.548852" elapsed="0.000567"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.531310" elapsed="0.018160"/>
</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-04-13T03:03:39.557129" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.552166" elapsed="0.005042"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.551569" elapsed="0.005689"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.551520" elapsed="0.005774"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.561035" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.557723" elapsed="0.003383"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.557377" elapsed="0.003781"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.557352" elapsed="0.003843"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.562117" 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-04-13T03:03:39.561434" elapsed="0.000737"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.562661" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.562293" elapsed="0.000456"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.563308" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.562993" elapsed="0.000341"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.562784" elapsed="0.000660"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.562263" elapsed="0.001204"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.564064" 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-04-13T03:03:39.563611" elapsed="0.000486"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.564424" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.564184" elapsed="0.000298"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.564979" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.564677" elapsed="0.000328"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.564506" elapsed="0.000535"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.564161" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.565239" elapsed="0.000363"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:39.566098" 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-04-13T03:03:39.565772" 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-04-13T03:03:39.566267" elapsed="0.003942"/>
</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-04-13T03:03:39.550442" elapsed="0.019847"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:39.570496" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-13T03:03:39.570374" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.570349" 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-04-13T03:03:39.570763" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:39.570836" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:39.573169" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:39.524710" elapsed="0.048488"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:39.573250" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:39.573401" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:39.522808" elapsed="0.050618"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.573900" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.573569" elapsed="0.000359"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.574967" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:39.574538" elapsed="0.000458"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:39.575045" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:39.575200" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:39.574183" elapsed="0.001044"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.575641" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.575368" elapsed="0.000321"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.579360" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.575826" elapsed="0.003562"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:39.597469" elapsed="0.000770"/>
</kw>
<msg time="2026-04-13T03:03:39.598309" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.597103" elapsed="0.001272"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.596707" elapsed="0.001749"/>
</kw>
<msg time="2026-04-13T03:03:39.598501" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.588451" elapsed="0.010096"/>
</kw>
<msg time="2026-04-13T03:03:39.598683" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.588036" elapsed="0.010674"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.599086" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.598861" elapsed="0.000250"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:39.599164" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:03:39.599366" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:39.599420" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:39.518178" elapsed="0.081267"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.599869" level="INFO">32</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.599598" elapsed="0.000317"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:39.600149" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:39.599995" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.599972" elapsed="0.000247"/>
</if>
<var name="${i}">32</var>
<status status="PASS" start="2026-04-13T03:03:39.517940" elapsed="0.082304"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:39.606510" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.606187" elapsed="0.000351"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:39.606588" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:03:39.606764" 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-04-13T03:03:39.605826" elapsed="0.000963"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.613962" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.613639" elapsed="0.000382"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.614439" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.614192" 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-04-13T03:03:39.630412" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:39.630831" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:39.631108" 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-04-13T03:03:39.616541" elapsed="0.014627"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.614566" elapsed="0.016712"/>
</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-04-13T03:03:39.631781" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.631344" elapsed="0.000592"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.614540" elapsed="0.017449"/>
</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-04-13T03:03:39.639412" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.634591" elapsed="0.005065"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.634000" elapsed="0.005732"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.633952" elapsed="0.005832"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.644601" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.640321" elapsed="0.004402"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.639903" elapsed="0.004887"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.639868" elapsed="0.004971"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.646033" 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-04-13T03:03:39.645178" elapsed="0.000906"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.646582" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.646257" elapsed="0.000433"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.647273" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.646933" elapsed="0.000367"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.646726" elapsed="0.000609"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.646227" elapsed="0.001130"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.647895" 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-04-13T03:03:39.647501" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.648212" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.647994" elapsed="0.000276"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.648753" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.648435" elapsed="0.000345"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.648294" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.647976" elapsed="0.000861"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.648982" elapsed="0.000351"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:39.649815" 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-04-13T03:03:39.649485" elapsed="0.000357"/>
</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-04-13T03:03:39.649983" elapsed="0.002455"/>
</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-04-13T03:03:39.632922" elapsed="0.019585"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:39.652712" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-13T03:03:39.652582" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.652562" 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-04-13T03:03:39.652961" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:39.653046" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:39.655282" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:39.607119" elapsed="0.048192"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:39.655363" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:39.655518" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:39.605243" elapsed="0.050302"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.656004" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.655707" elapsed="0.000325"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.657009" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:39.656586" elapsed="0.000451"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:39.657137" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:39.657298" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:39.656249" elapsed="0.001075"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.657741" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.657468" elapsed="0.000320"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.661548" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.657925" elapsed="0.003653"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:39.679180" elapsed="0.000723"/>
</kw>
<msg time="2026-04-13T03:03:39.679963" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.678831" elapsed="0.001192"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.678438" elapsed="0.001664"/>
</kw>
<msg time="2026-04-13T03:03:39.680145" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.670130" elapsed="0.010061"/>
</kw>
<msg time="2026-04-13T03:03:39.680296" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.669738" elapsed="0.010584"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.680695" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.680466" elapsed="0.000256"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:39.680772" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:39.680982" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:39.681046" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:39.600604" elapsed="0.080469"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.681473" level="INFO">33</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.681226" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:39.681761" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:39.681595" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.681574" elapsed="0.000255"/>
</if>
<var name="${i}">33</var>
<status status="PASS" start="2026-04-13T03:03:39.600398" elapsed="0.081455"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:39.688231" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.687925" elapsed="0.000333"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:39.688306" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:39.688456" 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-04-13T03:03:39.687570" elapsed="0.000912"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.694991" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.694736" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.695428" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.695176" elapsed="0.000296"/>
</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-04-13T03:03:39.710871" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:39.711178" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:39.711394" 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-04-13T03:03:39.697501" elapsed="0.013952"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.695541" elapsed="0.016008"/>
</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-04-13T03:03:39.711957" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.711608" elapsed="0.000498"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.695521" elapsed="0.016634"/>
</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-04-13T03:03:39.720066" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.714506" elapsed="0.005671"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.714001" elapsed="0.006253"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.713958" elapsed="0.006350"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.724364" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.720935" elapsed="0.003476"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.720435" elapsed="0.004010"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.720397" elapsed="0.004073"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.725086" 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-04-13T03:03:39.724670" elapsed="0.000443"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.725403" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.725184" elapsed="0.000277"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.725947" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.725643" elapsed="0.000330"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.725485" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.725165" elapsed="0.000865"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.726548" 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-04-13T03:03:39.726183" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.726887" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.726670" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.727405" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.727108" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.726968" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.726651" elapsed="0.000836"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.727641" elapsed="0.000350"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:39.728446" 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-04-13T03:03:39.728146" elapsed="0.000326"/>
</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-04-13T03:03:39.728610" elapsed="0.002480"/>
</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-04-13T03:03:39.712966" elapsed="0.018191"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:39.731339" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-13T03:03:39.731229" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.731209" 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-04-13T03:03:39.731564" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:39.731649" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:39.733881" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:39.688827" elapsed="0.045143"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:39.734026" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:39.734234" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:39.687032" elapsed="0.047230"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.734737" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.734410" elapsed="0.000359"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.735767" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:39.735342" elapsed="0.000453"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:39.735843" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:39.736024" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:39.734999" elapsed="0.001054"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.736458" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.736199" elapsed="0.000306"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.740243" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.736659" elapsed="0.003613"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:39.757509" elapsed="0.000723"/>
</kw>
<msg time="2026-04-13T03:03:39.758292" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.757147" elapsed="0.001206"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.756770" elapsed="0.001661"/>
</kw>
<msg time="2026-04-13T03:03:39.758474" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.748647" elapsed="0.009878"/>
</kw>
<msg time="2026-04-13T03:03:39.758654" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.748301" elapsed="0.010380"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.759036" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.758825" elapsed="0.000236"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:39.759111" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T03:03:39.759308" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:39.759360" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:39.682235" elapsed="0.077150"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.759803" level="INFO">34</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.759537" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:39.760076" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:39.759927" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.759906" elapsed="0.000237"/>
</if>
<var name="${i}">34</var>
<status status="PASS" start="2026-04-13T03:03:39.682003" elapsed="0.078164"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:39.766252" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.765901" elapsed="0.000441"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:39.766394" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:03:39.766550" 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-04-13T03:03:39.765550" elapsed="0.001025"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.773023" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.772752" elapsed="0.000319"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.773456" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.773212" 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-04-13T03:03:39.789306" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:39.789527" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:39.789743" 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-04-13T03:03:39.775574" elapsed="0.014211"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.773575" elapsed="0.016287"/>
</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-04-13T03:03:39.790219" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.789910" elapsed="0.000414"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.773553" elapsed="0.016804"/>
</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-04-13T03:03:39.798715" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.792915" elapsed="0.005917"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.792290" elapsed="0.006623"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.792242" elapsed="0.006728"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.803861" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.799571" elapsed="0.004342"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.799100" elapsed="0.004851"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.799061" elapsed="0.004918"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.804608" 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-04-13T03:03:39.804182" elapsed="0.000471"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.804958" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.804729" elapsed="0.000289"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.805497" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.805189" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.805042" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.804709" elapsed="0.000872"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.806135" 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-04-13T03:03:39.805767" elapsed="0.000395"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.806473" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.806250" elapsed="0.000282"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.807021" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.806715" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.806555" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.806231" elapsed="0.000875"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.807250" elapsed="0.000352"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:39.808216" 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-04-13T03:03:39.807772" elapsed="0.000472"/>
</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-04-13T03:03:39.808388" elapsed="0.002541"/>
</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-04-13T03:03:39.791104" elapsed="0.019895"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:39.811185" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T03:03:39.811072" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.811052" elapsed="0.000228"/>
</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-04-13T03:03:39.811415" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:39.811486" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T03:03:39.813797" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:39.766919" elapsed="0.046908"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:39.813880" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:39.814038" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:39.765012" elapsed="0.049052"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.814534" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.814230" elapsed="0.000331"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.815560" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:39.815150" elapsed="0.000438"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:39.815652" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:39.815816" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:39.814800" elapsed="0.001042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.816267" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.815986" elapsed="0.000328"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.820098" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.816452" elapsed="0.003675"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:39.837500" elapsed="0.000722"/>
</kw>
<msg time="2026-04-13T03:03:39.838286" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.837133" elapsed="0.001220"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.836728" elapsed="0.001732"/>
</kw>
<msg time="2026-04-13T03:03:39.838517" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.828452" elapsed="0.010113"/>
</kw>
<msg time="2026-04-13T03:03:39.838704" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.828069" elapsed="0.010661"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.839168" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.838951" elapsed="0.000244"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:39.839247" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:03:39.839450" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:39.839505" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:39.760517" elapsed="0.079014"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.839954" level="INFO">35</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.839700" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:39.840248" elapsed="0.000020"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:39.840095" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.840073" elapsed="0.000246"/>
</if>
<var name="${i}">35</var>
<status status="PASS" start="2026-04-13T03:03:39.760320" elapsed="0.080024"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:39.846607" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.846253" elapsed="0.000401"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:39.846709" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T03:03:39.846872" 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-04-13T03:03:39.845875" elapsed="0.001021"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.853499" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.853173" elapsed="0.000381"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.853969" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.853720" elapsed="0.000295"/>
</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-04-13T03:03:39.870397" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:39.870683" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:39.871070" 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-04-13T03:03:39.856119" elapsed="0.014995"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.854098" elapsed="0.017135"/>
</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-04-13T03:03:39.871583" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.871284" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.854073" elapsed="0.017666"/>
</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-04-13T03:03:39.878164" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.873420" elapsed="0.004921"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.873043" elapsed="0.005366"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.873011" elapsed="0.005444"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.881415" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.878963" elapsed="0.002508"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.878566" elapsed="0.002946"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.878533" elapsed="0.003008"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.882202" 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-04-13T03:03:39.881765" elapsed="0.000499"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.882575" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.882345" elapsed="0.000304"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.883132" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.882824" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.882675" elapsed="0.000599"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.882323" elapsed="0.000975"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.883843" 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-04-13T03:03:39.883444" elapsed="0.000433"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.884280" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.883972" elapsed="0.000384"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.885044" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.884594" elapsed="0.000487"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.884389" elapsed="0.000739"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.883947" elapsed="0.001212"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.885360" elapsed="0.000532"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:39.886550" 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-04-13T03:03:39.886098" elapsed="0.000488"/>
</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-04-13T03:03:39.886810" elapsed="0.003629"/>
</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-04-13T03:03:39.872318" elapsed="0.018228"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:39.890863" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-04-13T03:03:39.890695" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.890655" elapsed="0.000350"/>
</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-04-13T03:03:39.891233" elapsed="0.000033"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:39.891333" elapsed="0.000022"/>
</return>
<msg time="2026-04-13T03:03:39.893990" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:39.847225" elapsed="0.046803"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:39.894101" elapsed="0.000043"/>
</return>
<msg time="2026-04-13T03:03:39.894320" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:39.845281" elapsed="0.049073"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.894968" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.894558" elapsed="0.000439"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.896278" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:39.895681" elapsed="0.000636"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:39.896387" elapsed="0.000046"/>
</return>
<msg time="2026-04-13T03:03:39.896603" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:39.895230" elapsed="0.001421"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.897087" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.896800" elapsed="0.000335"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.901656" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.897273" elapsed="0.004422"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:39.920204" elapsed="0.000799"/>
</kw>
<msg time="2026-04-13T03:03:39.921078" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.919657" elapsed="0.001488"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.919135" elapsed="0.002089"/>
</kw>
<msg time="2026-04-13T03:03:39.921270" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.910787" elapsed="0.010528"/>
</kw>
<msg time="2026-04-13T03:03:39.921430" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.910304" elapsed="0.011153"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.921860" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.921606" elapsed="0.000280"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:39.921940" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:03:39.922143" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:39.922197" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:39.840728" elapsed="0.081495"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.922705" level="INFO">36</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.922424" elapsed="0.000328"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:39.922990" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:39.922833" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.922811" elapsed="0.000249"/>
</if>
<var name="${i}">36</var>
<status status="PASS" start="2026-04-13T03:03:39.840499" elapsed="0.082586"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:39.929382" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.929047" elapsed="0.000363"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:39.929464" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T03:03:39.929640" 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-04-13T03:03:39.928705" elapsed="0.000962"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.936521" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.936171" elapsed="0.000406"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.937017" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.936744" elapsed="0.000319"/>
</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-04-13T03:03:39.953764" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:39.954075" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:39.954367" 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-04-13T03:03:39.939519" elapsed="0.014911"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.937150" elapsed="0.017389"/>
</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-04-13T03:03:39.955015" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.954605" elapsed="0.000554"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.937124" elapsed="0.018083"/>
</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-04-13T03:03:39.963651" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.957742" elapsed="0.006060"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.957228" elapsed="0.006623"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.957183" elapsed="0.006714"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.966767" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.964290" elapsed="0.002530"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.964010" elapsed="0.002849"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.963977" elapsed="0.002908"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.967501" 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-04-13T03:03:39.967077" elapsed="0.000451"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.967855" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.967603" elapsed="0.000310"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.968399" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.968094" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.967937" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.967583" elapsed="0.000903"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.969010" 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-04-13T03:03:39.968625" elapsed="0.000412"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:39.969321" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:39.969106" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.969855" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.969541" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:39.969402" elapsed="0.000515"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.969088" elapsed="0.000850"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.970083" elapsed="0.000394"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:39.970947" 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-04-13T03:03:39.970642" 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-04-13T03:03:39.971116" elapsed="0.002499"/>
</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-04-13T03:03:39.956129" elapsed="0.017574"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:39.973892" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T03:03:39.973780" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:39.973760" elapsed="0.000228"/>
</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-04-13T03:03:39.974123" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:39.974192" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:39.976514" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:39.930025" elapsed="0.046518"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:39.976595" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:39.976770" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:39.928071" elapsed="0.048725"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.977255" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:39.976944" elapsed="0.000339"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.978317" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:39.977871" elapsed="0.000477"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:39.978462" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:39.978625" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:39.977502" elapsed="0.001165"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:39.979071" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:39.978811" elapsed="0.000307"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:39.982969" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:39.979255" elapsed="0.003749"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:40.001045" elapsed="0.000758"/>
</kw>
<msg time="2026-04-13T03:03:40.001866" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.000658" elapsed="0.001273"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.000224" elapsed="0.001785"/>
</kw>
<msg time="2026-04-13T03:03:40.002053" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:39.991331" elapsed="0.010766"/>
</kw>
<msg time="2026-04-13T03:03:40.002215" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:39.990984" elapsed="0.011258"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.002687" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.002449" elapsed="0.000265"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:40.002767" elapsed="0.000039"/>
</return>
<msg time="2026-04-13T03:03:40.002973" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:40.003027" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:39.923469" elapsed="0.079584"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.003484" level="INFO">37</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.003207" elapsed="0.000325"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:40.003851" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:40.003611" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.003590" elapsed="0.000330"/>
</if>
<var name="${i}">37</var>
<status status="PASS" start="2026-04-13T03:03:39.923242" elapsed="0.080702"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:40.010378" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.009913" elapsed="0.000497"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:40.010461" elapsed="0.000036"/>
</return>
<msg time="2026-04-13T03:03:40.010625" 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-04-13T03:03:40.009545" elapsed="0.001129"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.017222" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.016941" elapsed="0.000330"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.017734" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.017409" elapsed="0.000369"/>
</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-04-13T03:03:40.035088" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:40.035427" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:40.035616" 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-04-13T03:03:40.019955" elapsed="0.015722"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.017855" elapsed="0.017893"/>
</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-04-13T03:03:40.036074" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.035794" elapsed="0.000379"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.017833" elapsed="0.018369"/>
</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-04-13T03:03:40.042739" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.037770" elapsed="0.005088"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.037429" elapsed="0.005511"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.037399" elapsed="0.005601"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.045960" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.043471" elapsed="0.002555"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.043120" elapsed="0.002957"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.043083" elapsed="0.003030"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.046837" 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-04-13T03:03:40.046339" elapsed="0.000536"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.047291" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.046977" elapsed="0.000397"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.048092" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.047647" elapsed="0.000481"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.047410" elapsed="0.000768"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.046950" elapsed="0.001259"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.048968" 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-04-13T03:03:40.048417" elapsed="0.000589"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.049434" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.049116" elapsed="0.000399"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.050253" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.049803" elapsed="0.000489"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.049550" elapsed="0.000842"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.049088" elapsed="0.001338"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.050659" elapsed="0.000490"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:40.051803" 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-04-13T03:03:40.051353" elapsed="0.000480"/>
</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-04-13T03:03:40.052004" elapsed="0.004470"/>
</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-04-13T03:03:40.036771" elapsed="0.019792"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:40.056889" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-04-13T03:03:40.056747" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.056651" elapsed="0.000352"/>
</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-04-13T03:03:40.057182" elapsed="0.000027"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:40.057265" elapsed="0.000017"/>
</return>
<msg time="2026-04-13T03:03:40.060103" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:40.011038" elapsed="0.049159"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:40.060254" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:40.060416" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:40.008989" elapsed="0.051455"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.060953" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.060595" elapsed="0.000387"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.062015" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:40.061562" elapsed="0.000482"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:40.062092" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:40.062251" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:40.061203" elapsed="0.001074"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.062737" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.062441" elapsed="0.000342"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.066584" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.062919" elapsed="0.003693"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:40.084593" elapsed="0.000744"/>
</kw>
<msg time="2026-04-13T03:03:40.085407" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.084176" elapsed="0.001296"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.083616" elapsed="0.001936"/>
</kw>
<msg time="2026-04-13T03:03:40.085597" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.074984" elapsed="0.010689"/>
</kw>
<msg time="2026-04-13T03:03:40.085787" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.074656" elapsed="0.011156"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.086176" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.085958" elapsed="0.000244"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:40.086253" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:03:40.086591" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:40.086704" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:40.004340" elapsed="0.082392"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.087142" level="INFO">38</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.086887" elapsed="0.000302"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:40.087422" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:40.087268" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.087247" elapsed="0.000244"/>
</if>
<var name="${i}">38</var>
<status status="PASS" start="2026-04-13T03:03:40.004120" elapsed="0.083395"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:40.093943" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.093603" elapsed="0.000444"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:40.094100" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:03:40.094258" 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-04-13T03:03:40.093267" elapsed="0.001016"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.100784" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.100491" elapsed="0.000340"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.101242" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.100985" elapsed="0.000300"/>
</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-04-13T03:03:40.116456" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:40.116788" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:40.117031" 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-04-13T03:03:40.103338" elapsed="0.013748"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.101361" elapsed="0.015803"/>
</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-04-13T03:03:40.117469" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.117210" elapsed="0.000352"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.101339" elapsed="0.016253"/>
</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-04-13T03:03:40.123125" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.119199" elapsed="0.004010"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.118889" elapsed="0.004368"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.118861" elapsed="0.004430"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.126873" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.123687" elapsed="0.003251"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.123371" elapsed="0.003618"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.123348" elapsed="0.003683"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.127642" 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-04-13T03:03:40.127225" elapsed="0.000448"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.127967" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.127745" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.128529" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.128222" elapsed="0.000333"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.128069" elapsed="0.000521"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.127726" elapsed="0.000886"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.129141" 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-04-13T03:03:40.128772" elapsed="0.000395"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.129478" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.129237" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.130027" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.129719" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.129560" elapsed="0.000530"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.129219" elapsed="0.000892"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.130255" elapsed="0.000398"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:40.131236" 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-04-13T03:03:40.130809" elapsed="0.000455"/>
</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-04-13T03:03:40.131408" elapsed="0.002549"/>
</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-04-13T03:03:40.118156" elapsed="0.015873"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:40.134220" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-13T03:03:40.134106" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.134085" elapsed="0.000232"/>
</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-04-13T03:03:40.134500" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:40.134573" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:40.136824" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:40.094666" elapsed="0.042187"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:40.136906" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:40.137060" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:40.092710" elapsed="0.044377"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.137530" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.137232" elapsed="0.000326"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.138580" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:40.138149" elapsed="0.000459"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:40.138672" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:40.138835" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:40.137803" elapsed="0.001058"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.139263" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.139005" elapsed="0.000307"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.143067" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.139452" elapsed="0.003643"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:40.163246" elapsed="0.000916"/>
</kw>
<msg time="2026-04-13T03:03:40.164235" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.162655" elapsed="0.001649"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.161678" elapsed="0.002708"/>
</kw>
<msg time="2026-04-13T03:03:40.164432" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.151534" elapsed="0.012951"/>
</kw>
<msg time="2026-04-13T03:03:40.164597" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.151183" elapsed="0.013440"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.165265" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.164931" elapsed="0.000373"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:40.165381" elapsed="0.000050"/>
</return>
<msg time="2026-04-13T03:03:40.165702" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:40.165784" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:40.087909" elapsed="0.077914"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.166470" level="INFO">39</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.166049" elapsed="0.000489"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:40.166878" elapsed="0.000026"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:40.166666" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.166616" elapsed="0.000363"/>
</if>
<var name="${i}">39</var>
<status status="PASS" start="2026-04-13T03:03:40.087693" elapsed="0.079327"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:40.176303" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.175779" elapsed="0.000574"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:40.176421" elapsed="0.000047"/>
</return>
<msg time="2026-04-13T03:03:40.176611" 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-04-13T03:03:40.175225" elapsed="0.001446"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.186719" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.186001" elapsed="0.000802"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.187578" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.187029" elapsed="0.000641"/>
</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-04-13T03:03:40.211006" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:40.211221" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:40.211407" 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-04-13T03:03:40.190845" elapsed="0.020604"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.187789" elapsed="0.023732"/>
</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-04-13T03:03:40.211836" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.211564" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.187754" elapsed="0.024210"/>
</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-04-13T03:03:40.217148" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.213504" elapsed="0.003722"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.213190" elapsed="0.004088"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.213161" elapsed="0.004155"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.220425" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.217746" elapsed="0.002727"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.217402" elapsed="0.003108"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.217377" elapsed="0.003158"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.221125" 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-04-13T03:03:40.220719" elapsed="0.000434"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.221445" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.221225" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.222010" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.221697" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.221529" elapsed="0.000621"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.221206" elapsed="0.000967"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.222739" 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-04-13T03:03:40.222321" elapsed="0.000446"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.223064" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.222840" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.223588" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.223289" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.223147" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.222821" elapsed="0.000868"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.223832" elapsed="0.000353"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:40.224654" 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-04-13T03:03:40.224336" elapsed="0.000345"/>
</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-04-13T03:03:40.224821" elapsed="0.002459"/>
</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-04-13T03:03:40.212515" elapsed="0.014833"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:40.227535" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-13T03:03:40.227423" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.227403" 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-04-13T03:03:40.227785" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:40.227856" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:40.230085" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:40.177185" elapsed="0.052929"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:40.230167" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:40.230323" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:40.174215" elapsed="0.056135"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.230861" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.230531" elapsed="0.000358"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.231888" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:40.231449" elapsed="0.000468"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:40.231967" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:40.232129" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:40.231108" elapsed="0.001048"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.232564" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.232304" elapsed="0.000308"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.236317" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.232766" elapsed="0.003579"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:40.253672" elapsed="0.000695"/>
</kw>
<msg time="2026-04-13T03:03:40.254461" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.253298" elapsed="0.001226"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.252921" elapsed="0.001682"/>
</kw>
<msg time="2026-04-13T03:03:40.254673" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.244747" elapsed="0.009974"/>
</kw>
<msg time="2026-04-13T03:03:40.254828" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.244376" elapsed="0.010478"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.255210" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.255000" elapsed="0.000236"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:40.255287" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T03:03:40.255484" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:40.255537" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:40.167530" elapsed="0.088032"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.255976" level="INFO">40</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.255727" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:40.256249" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:40.256099" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.256078" elapsed="0.000238"/>
</if>
<var name="${i}">40</var>
<status status="PASS" start="2026-04-13T03:03:40.167243" elapsed="0.089097"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:40.262412" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.262094" elapsed="0.000393"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:40.262540" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:03:40.262715" 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-04-13T03:03:40.261758" elapsed="0.000982"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.269048" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.268791" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.269481" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.269235" 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-04-13T03:03:40.285938" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:40.286161" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:40.286391" 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-04-13T03:03:40.271560" elapsed="0.014927"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.269595" elapsed="0.016996"/>
</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-04-13T03:03:40.287048" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.286683" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.269575" elapsed="0.017667"/>
</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-04-13T03:03:40.295282" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.289810" elapsed="0.005598"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.289294" elapsed="0.006150"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.289250" elapsed="0.006219"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.297973" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.295755" elapsed="0.002264"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.295526" elapsed="0.002528"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.295509" elapsed="0.002569"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.298673" 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-04-13T03:03:40.298239" elapsed="0.000462"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.298996" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.298771" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.299534" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.299224" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.299078" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.298752" elapsed="0.000868"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.300166" 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-04-13T03:03:40.299788" elapsed="0.000406"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.300485" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.300264" elapsed="0.000281"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.301043" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.300732" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.300570" elapsed="0.000536"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.300246" elapsed="0.000883"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.301273" elapsed="0.000374"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:40.302139" 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-04-13T03:03:40.301806" 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-04-13T03:03:40.302311" elapsed="0.002467"/>
</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-04-13T03:03:40.288264" elapsed="0.016582"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:40.305026" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-13T03:03:40.304915" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.304897" elapsed="0.000226"/>
</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-04-13T03:03:40.305256" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:40.305327" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:40.307590" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:40.263080" elapsed="0.044539"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:40.307685" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:40.307839" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:40.261194" elapsed="0.046671"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.308301" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.308010" elapsed="0.000318"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.309263" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:40.308866" elapsed="0.000425"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:40.309383" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:40.309544" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:40.308530" elapsed="0.001041"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.309988" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.309730" elapsed="0.000305"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.313786" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.310174" elapsed="0.003642"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:40.331359" elapsed="0.000730"/>
</kw>
<msg time="2026-04-13T03:03:40.332145" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.331011" elapsed="0.001193"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.330618" elapsed="0.001662"/>
</kw>
<msg time="2026-04-13T03:03:40.332324" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.322212" elapsed="0.010166"/>
</kw>
<msg time="2026-04-13T03:03:40.332494" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.321883" elapsed="0.010638"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.332893" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.332684" elapsed="0.000235"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:40.332968" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:40.333159" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:40.333220" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:40.256704" elapsed="0.076543"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.333659" level="INFO">41</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.333395" elapsed="0.000313"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:40.333932" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:40.333784" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.333763" elapsed="0.000236"/>
</if>
<var name="${i}">41</var>
<status status="PASS" start="2026-04-13T03:03:40.256488" elapsed="0.077534"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:40.340114" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.339799" elapsed="0.000343"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:40.340191" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:40.340341" 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-04-13T03:03:40.339449" elapsed="0.000918"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.346818" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.346545" elapsed="0.000320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.347252" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.347005" 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-04-13T03:03:40.364516" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:40.364934" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:40.365156" 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-04-13T03:03:40.349382" elapsed="0.015834"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.347364" elapsed="0.017947"/>
</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-04-13T03:03:40.365714" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.365369" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.347345" elapsed="0.018601"/>
</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-04-13T03:03:40.372825" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.368231" elapsed="0.004664"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.367745" elapsed="0.005199"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.367701" elapsed="0.005293"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.376539" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.373366" elapsed="0.003239"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.373074" elapsed="0.003606"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.373051" elapsed="0.003664"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.377606" 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-04-13T03:03:40.376932" elapsed="0.000757"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.378224" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.377832" elapsed="0.000482"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.379123" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.378706" elapsed="0.000453"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.378362" elapsed="0.000847"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.377795" elapsed="0.001438"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.379779" 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-04-13T03:03:40.379381" elapsed="0.000434"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.380146" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.379909" elapsed="0.000297"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.380803" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.380373" elapsed="0.000459"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.380230" elapsed="0.000639"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.379884" elapsed="0.001007"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.381035" elapsed="0.000363"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:40.381884" 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-04-13T03:03:40.381554" elapsed="0.000366"/>
</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-04-13T03:03:40.382109" elapsed="0.003323"/>
</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-04-13T03:03:40.366774" elapsed="0.018732"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:40.385775" elapsed="0.000048"/>
</return>
<status status="PASS" start="2026-04-13T03:03:40.385592" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.385566" elapsed="0.000349"/>
</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-04-13T03:03:40.386122" elapsed="0.000035"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:40.386230" elapsed="0.000024"/>
</return>
<msg time="2026-04-13T03:03:40.389403" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:40.340708" elapsed="0.048809"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:40.389599" elapsed="0.000061"/>
</return>
<msg time="2026-04-13T03:03:40.389804" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:40.338913" elapsed="0.050919"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.390521" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.389995" elapsed="0.000555"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.391589" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:40.391162" elapsed="0.000456"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:40.391684" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:40.391848" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:40.390798" elapsed="0.001076"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.392315" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.392035" elapsed="0.000329"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.396058" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.392504" elapsed="0.003585"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:40.415023" elapsed="0.000794"/>
</kw>
<msg time="2026-04-13T03:03:40.415885" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.414595" elapsed="0.001354"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.414053" elapsed="0.001983"/>
</kw>
<msg time="2026-04-13T03:03:40.416094" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.404909" elapsed="0.011247"/>
</kw>
<msg time="2026-04-13T03:03:40.416304" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.404493" elapsed="0.011848"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.416853" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.416546" elapsed="0.000335"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:40.416934" elapsed="0.000033"/>
</return>
<msg time="2026-04-13T03:03:40.417137" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:40.417191" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:40.334364" elapsed="0.082852"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.417662" level="INFO">42</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.417369" elapsed="0.000345"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:40.417958" elapsed="0.000023"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:40.417795" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.417773" elapsed="0.000261"/>
</if>
<var name="${i}">42</var>
<status status="PASS" start="2026-04-13T03:03:40.334170" elapsed="0.083889"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:40.424451" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.424132" elapsed="0.000410"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:40.424597" elapsed="0.000050"/>
</return>
<msg time="2026-04-13T03:03:40.424776" 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-04-13T03:03:40.423765" elapsed="0.001036"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.431215" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.430958" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.431658" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.431400" elapsed="0.000304"/>
</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-04-13T03:03:40.448551" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:40.448913" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:40.449168" 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-04-13T03:03:40.433762" elapsed="0.015470"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.431777" elapsed="0.017568"/>
</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-04-13T03:03:40.449946" elapsed="0.000095"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.449412" elapsed="0.000747"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.431757" elapsed="0.018456"/>
</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-04-13T03:03:40.458184" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.453484" elapsed="0.004780"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.452863" elapsed="0.005454"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.452812" elapsed="0.005542"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.462858" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.458822" elapsed="0.004112"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.458442" elapsed="0.004545"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.458416" elapsed="0.004609"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.463650" 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-04-13T03:03:40.463213" elapsed="0.000465"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.463979" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.463754" elapsed="0.000296"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.464532" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.464226" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.464077" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.463734" elapsed="0.000885"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.465144" 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-04-13T03:03:40.464778" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.465458" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.465242" elapsed="0.000275"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.465997" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.465700" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.465541" elapsed="0.000523"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.465224" elapsed="0.000862"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.466228" elapsed="0.000376"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:40.467158" 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-04-13T03:03:40.466785" 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-04-13T03:03:40.467325" elapsed="0.002631"/>
</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-04-13T03:03:40.451464" elapsed="0.018565"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:40.470224" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-13T03:03:40.470109" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.470087" elapsed="0.000238"/>
</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-04-13T03:03:40.470467" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:40.470583" elapsed="0.000018"/>
</return>
<msg time="2026-04-13T03:03:40.472885" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:40.425131" elapsed="0.047783"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:40.472967" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:40.473125" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:40.423181" elapsed="0.049970"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.473642" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.473318" elapsed="0.000354"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.474713" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:40.474246" elapsed="0.000496"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:40.474791" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:40.474951" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:40.473896" elapsed="0.001082"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.475381" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.475122" elapsed="0.000308"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.479164" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.475567" elapsed="0.003627"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:40.497159" elapsed="0.000754"/>
</kw>
<msg time="2026-04-13T03:03:40.497986" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.496773" elapsed="0.001280"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.496320" elapsed="0.001813"/>
</kw>
<msg time="2026-04-13T03:03:40.498179" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.488003" elapsed="0.010221"/>
</kw>
<msg time="2026-04-13T03:03:40.498336" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.487522" elapsed="0.010840"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.498849" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.498604" elapsed="0.000273"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:40.498931" elapsed="0.000034"/>
</return>
<msg time="2026-04-13T03:03:40.499132" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:40.499186" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:40.418445" elapsed="0.080766"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.499610" level="INFO">43</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.499360" elapsed="0.000314"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:40.499908" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:40.499754" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.499732" elapsed="0.000245"/>
</if>
<var name="${i}">43</var>
<status status="PASS" start="2026-04-13T03:03:40.418232" elapsed="0.081771"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:40.506310" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.505995" elapsed="0.000343"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:40.506386" elapsed="0.000032"/>
</return>
<msg time="2026-04-13T03:03:40.506539" 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-04-13T03:03:40.505606" elapsed="0.000987"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.513114" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.512826" elapsed="0.000338"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.513551" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.513305" 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-04-13T03:03:40.529526" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:40.529882" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:40.530086" 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-04-13T03:03:40.515725" elapsed="0.014407"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.513690" elapsed="0.016523"/>
</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-04-13T03:03:40.530713" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.530264" elapsed="0.000600"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.513665" elapsed="0.017247"/>
</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-04-13T03:03:40.540009" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.534254" elapsed="0.005874"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.533525" elapsed="0.006680"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.533458" elapsed="0.006806"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.544538" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.540869" elapsed="0.003741"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.540398" elapsed="0.004283"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.540358" elapsed="0.004362"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.545527" 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-04-13T03:03:40.544971" elapsed="0.000597"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.546029" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.545696" elapsed="0.000422"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.546886" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.546379" elapsed="0.000547"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.546157" elapsed="0.000914"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.545664" elapsed="0.001444"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.547910" 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-04-13T03:03:40.547326" elapsed="0.000624"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.548387" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.548060" elapsed="0.000415"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.549183" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.548745" elapsed="0.000477"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.548512" elapsed="0.000765"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.548026" elapsed="0.001286"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.549536" elapsed="0.000561"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:40.550702" 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-04-13T03:03:40.550308" elapsed="0.000422"/>
</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-04-13T03:03:40.550875" elapsed="0.003878"/>
</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-04-13T03:03:40.532053" elapsed="0.022774"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:40.555022" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-04-13T03:03:40.554906" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.554882" 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-04-13T03:03:40.555261" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:40.555332" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:40.557614" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:40.506957" elapsed="0.050701"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:40.557712" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:40.557868" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:40.505056" elapsed="0.052840"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.558379" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.558041" elapsed="0.000376"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.559715" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:40.559188" elapsed="0.000562"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:40.559814" elapsed="0.000037"/>
</return>
<msg time="2026-04-13T03:03:40.560032" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:40.558740" elapsed="0.001332"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.560599" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.560262" elapsed="0.000417"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.565195" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.560862" elapsed="0.004362"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:40.583429" elapsed="0.000764"/>
</kw>
<msg time="2026-04-13T03:03:40.584259" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.583054" elapsed="0.001271"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.582540" elapsed="0.001889"/>
</kw>
<msg time="2026-04-13T03:03:40.584499" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.573934" elapsed="0.010627"/>
</kw>
<msg time="2026-04-13T03:03:40.584697" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.573574" elapsed="0.011148"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.585092" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.584871" elapsed="0.000247"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:40.585172" elapsed="0.000035"/>
</return>
<msg time="2026-04-13T03:03:40.585374" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:40.585454" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:40.500392" elapsed="0.085094"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.585914" level="INFO">44</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.585658" elapsed="0.000302"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:40.586195" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:40.586041" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.586018" elapsed="0.000247"/>
</if>
<var name="${i}">44</var>
<status status="PASS" start="2026-04-13T03:03:40.500180" elapsed="0.086109"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:40.592538" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.592203" elapsed="0.000363"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:40.592614" elapsed="0.000063"/>
</return>
<msg time="2026-04-13T03:03:40.592804" 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-04-13T03:03:40.591847" elapsed="0.000983"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.599337" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.599084" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.599798" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.599522" elapsed="0.000321"/>
</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-04-13T03:03:40.615389" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:40.615735" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:40.615989" 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-04-13T03:03:40.601920" elapsed="0.014124"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.599913" elapsed="0.016224"/>
</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-04-13T03:03:40.616554" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.616200" elapsed="0.000513"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.599892" elapsed="0.016865"/>
</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-04-13T03:03:40.624144" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.619040" elapsed="0.005311"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.618472" elapsed="0.005935"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.618427" elapsed="0.006020"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.628474" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.624884" elapsed="0.003664"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.624539" elapsed="0.004062"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.624513" elapsed="0.004149"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.629509" 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-04-13T03:03:40.628917" elapsed="0.000634"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.630014" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.629681" elapsed="0.000428"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.630651" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.630304" elapsed="0.000379"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.630145" elapsed="0.000577"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.629650" elapsed="0.001095"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.631272" 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-04-13T03:03:40.630894" elapsed="0.000406"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.631596" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.631374" elapsed="0.000306"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.632167" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.631853" elapsed="0.000343"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.631706" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.631355" elapsed="0.000902"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.632398" elapsed="0.000377"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:40.633234" 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-04-13T03:03:40.632930" 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-04-13T03:03:40.633404" elapsed="0.002437"/>
</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-04-13T03:03:40.617515" elapsed="0.018395"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:40.636113" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-13T03:03:40.635984" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.635964" 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-04-13T03:03:40.636377" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:40.636462" elapsed="0.000016"/>
</return>
<msg time="2026-04-13T03:03:40.638703" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:40.593153" elapsed="0.045579"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:40.638786" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:40.638942" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:40.591204" elapsed="0.047765"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.639411" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.639117" elapsed="0.000322"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.640424" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:40.639996" elapsed="0.000457"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:40.640547" elapsed="0.000031"/>
</return>
<msg time="2026-04-13T03:03:40.640732" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:40.639664" elapsed="0.001096"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.641169" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.640907" elapsed="0.000313"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.644926" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.641362" elapsed="0.003592"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:40.662414" elapsed="0.000705"/>
</kw>
<msg time="2026-04-13T03:03:40.663175" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.662035" elapsed="0.001198"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.661651" elapsed="0.001660"/>
</kw>
<msg time="2026-04-13T03:03:40.663355" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.653386" elapsed="0.010015"/>
</kw>
<msg time="2026-04-13T03:03:40.663507" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.653063" elapsed="0.010469"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.663901" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.663695" elapsed="0.000233"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:40.663976" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:40.664215" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:40.664270" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:40.586700" elapsed="0.077595"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.664716" level="INFO">45</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.664448" elapsed="0.000315"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:40.664978" elapsed="0.000019"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:40.664833" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.664814" elapsed="0.000232"/>
</if>
<var name="${i}">45</var>
<status status="PASS" start="2026-04-13T03:03:40.586442" elapsed="0.078628"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:40.671216" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.670893" elapsed="0.000350"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:40.671292" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:40.671445" 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-04-13T03:03:40.670482" elapsed="0.000989"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.678317" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.678063" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.678818" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.678503" 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-04-13T03:03:40.694397" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:40.694828" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:40.695004" 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-04-13T03:03:40.681035" elapsed="0.014009"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.678932" elapsed="0.016216"/>
</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-04-13T03:03:40.695571" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.695211" elapsed="0.000546"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.678912" elapsed="0.016894"/>
</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-04-13T03:03:40.703413" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.698217" elapsed="0.005248"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.697666" elapsed="0.005836"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.697590" elapsed="0.005938"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.706199" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.703817" elapsed="0.002429"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.703586" elapsed="0.002695"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.703569" elapsed="0.002737"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.706925" 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-04-13T03:03:40.706469" elapsed="0.000484"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.707249" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.707025" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.707801" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.707481" elapsed="0.000348"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.707334" elapsed="0.000531"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.707006" elapsed="0.000881"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.708401" 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-04-13T03:03:40.708030" 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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.708758" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.708500" elapsed="0.000333"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.709392" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.709051" elapsed="0.000368"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.708865" elapsed="0.000591"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.708481" elapsed="0.000997"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.709621" elapsed="0.000370"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:40.710460" 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-04-13T03:03:40.710145" 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-04-13T03:03:40.710650" elapsed="0.002465"/>
</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-04-13T03:03:40.696618" elapsed="0.016563"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:40.713363" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-13T03:03:40.713253" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.713233" elapsed="0.000222"/>
</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-04-13T03:03:40.713588" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:40.713676" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:40.715885" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:40.671824" elapsed="0.044130"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:40.716008" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:40.716163" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:40.669943" elapsed="0.046246"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.716638" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.716332" elapsed="0.000336"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.717667" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:40.717243" elapsed="0.000453"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:40.717747" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:40.717906" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:40.716878" elapsed="0.001055"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.718341" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.718084" elapsed="0.000306"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.722193" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.718531" elapsed="0.003691"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:40.739469" elapsed="0.000713"/>
</kw>
<msg time="2026-04-13T03:03:40.740236" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.739122" elapsed="0.001169"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.738746" elapsed="0.001620"/>
</kw>
<msg time="2026-04-13T03:03:40.740410" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.730461" elapsed="0.009994"/>
</kw>
<msg time="2026-04-13T03:03:40.740557" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.730145" elapsed="0.010437"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.740955" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.740750" elapsed="0.000230"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:40.741027" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:40.741220" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:40.741272" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:40.665441" elapsed="0.075856"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.741714" level="INFO">46</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.741448" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:40.741983" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:40.741825" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.741806" elapsed="0.000244"/>
</if>
<var name="${i}">46</var>
<status status="PASS" start="2026-04-13T03:03:40.665218" elapsed="0.076857"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:40.748151" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.747850" elapsed="0.000365"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:40.748266" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:40.748419" 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-04-13T03:03:40.747500" elapsed="0.000945"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.754855" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.754551" elapsed="0.000350"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.755286" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.755042" 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-04-13T03:03:40.770181" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:40.770337" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:40.770459" 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-04-13T03:03:40.757327" elapsed="0.013159"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.755397" elapsed="0.015139"/>
</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-04-13T03:03:40.770813" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.770568" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.755378" elapsed="0.015526"/>
</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-04-13T03:03:40.774544" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.772042" elapsed="0.002552"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.771817" elapsed="0.002827"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.771795" elapsed="0.002875"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.777182" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.774959" elapsed="0.002269"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.774747" elapsed="0.002515"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.774730" elapsed="0.002556"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.777873" 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-04-13T03:03:40.777450" elapsed="0.000449"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.778191" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.777968" elapsed="0.000280"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.778805" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.778435" elapsed="0.000396"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.778272" elapsed="0.000594"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.777950" elapsed="0.000938"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.779403" 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-04-13T03:03:40.779028" elapsed="0.000402"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.779732" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.779498" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.780246" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.779954" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.779814" elapsed="0.000492"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.779480" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.780573" elapsed="0.000360"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:40.781599" 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-04-13T03:03:40.781087" elapsed="0.000553"/>
</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-04-13T03:03:40.781784" elapsed="0.002619"/>
</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-04-13T03:03:40.771323" elapsed="0.013147"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:40.784670" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-13T03:03:40.784542" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.784522" elapsed="0.000257"/>
</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-04-13T03:03:40.784925" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:40.784996" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:40.787269" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:40.748804" elapsed="0.038494"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:40.787352" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:40.787508" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:40.746959" elapsed="0.040575"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.788016" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.787698" elapsed="0.000345"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.789045" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:40.788618" elapsed="0.000455"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:40.789120" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:40.789280" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:40.788266" elapsed="0.001040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.789722" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.789448" elapsed="0.000320"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.793468" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.789904" elapsed="0.003591"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:40.810917" elapsed="0.000673"/>
</kw>
<msg time="2026-04-13T03:03:40.811667" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.810520" elapsed="0.001206"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.810152" elapsed="0.001649"/>
</kw>
<msg time="2026-04-13T03:03:40.811845" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.802098" elapsed="0.009791"/>
</kw>
<msg time="2026-04-13T03:03:40.811991" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.801767" elapsed="0.010248"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.812432" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.812226" elapsed="0.000231"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:40.812504" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:40.812713" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:40.812764" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:40.742411" elapsed="0.070378"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.813183" level="INFO">47</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.812937" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:40.813450" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:40.813304" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.813283" elapsed="0.000232"/>
</if>
<var name="${i}">47</var>
<status status="PASS" start="2026-04-13T03:03:40.742220" elapsed="0.071319"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:40.819501" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.819205" elapsed="0.000322"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:40.819572" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:40.819735" 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-04-13T03:03:40.818870" elapsed="0.000889"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.826044" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.825798" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.826463" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.826224" 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-04-13T03:03:40.841874" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:40.842010" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:40.842110" 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-04-13T03:03:40.828551" elapsed="0.013585"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.826573" elapsed="0.015605"/>
</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-04-13T03:03:40.842342" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.842204" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.826554" elapsed="0.015872"/>
</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-04-13T03:03:40.845879" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.843450" elapsed="0.002479"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.843246" elapsed="0.002717"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.843227" elapsed="0.002760"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.848468" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.846249" elapsed="0.002265"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.846043" elapsed="0.002506"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.846026" elapsed="0.002547"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.849128" 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-04-13T03:03:40.848742" elapsed="0.000413"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.849440" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.849224" elapsed="0.000279"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.849984" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.849684" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.849527" elapsed="0.000568"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.849206" elapsed="0.000912"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.850621" 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-04-13T03:03:40.850258" elapsed="0.000408"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.850963" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.850748" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.851474" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.851183" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.851044" elapsed="0.000491"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.850719" 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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.851707" elapsed="0.000342"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:40.852485" 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-04-13T03:03:40.852197" elapsed="0.000314"/>
</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-04-13T03:03:40.852664" elapsed="0.002377"/>
</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-04-13T03:03:40.842827" elapsed="0.012278"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:40.855281" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-13T03:03:40.855175" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.855156" elapsed="0.000211"/>
</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-04-13T03:03:40.855499" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:40.855568" elapsed="0.000015"/>
</return>
<msg time="2026-04-13T03:03:40.857771" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:40.820098" elapsed="0.037701"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:40.857851" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:03:40.858000" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:40.818296" elapsed="0.039730"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.858454" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.858167" elapsed="0.000315"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.859424" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:40.859032" elapsed="0.000420"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:40.859499" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:40.859670" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:40.858699" elapsed="0.000998"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.860089" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.859837" elapsed="0.000298"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.863802" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.860270" elapsed="0.003560"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:40.880943" elapsed="0.000640"/>
</kw>
<msg time="2026-04-13T03:03:40.881654" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.880586" elapsed="0.001124"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.880218" elapsed="0.001567"/>
</kw>
<msg time="2026-04-13T03:03:40.881828" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.872157" elapsed="0.009715"/>
</kw>
<msg time="2026-04-13T03:03:40.881973" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.871846" elapsed="0.010152"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.882337" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.882137" elapsed="0.000225"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:40.882408" elapsed="0.000028"/>
</return>
<msg time="2026-04-13T03:03:40.882592" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:40.882658" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:40.813894" elapsed="0.068791"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.883097" level="INFO">48</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.882848" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:40.883491" elapsed="0.000017"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:40.883207" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.883189" elapsed="0.000367"/>
</if>
<var name="${i}">48</var>
<status status="PASS" start="2026-04-13T03:03:40.813701" elapsed="0.069877"/>
</iter>
<iter>
<kw name="Fetch Status Information From Netconf Endpoint" owner="DaeximKeywords">
<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-04-13T03:03:40.889552" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.889257" elapsed="0.000322"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-13T03:03:40.889638" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:40.889788" 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-04-13T03:03:40.888932" elapsed="0.000881"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.896189" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.895907" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.896653" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.896377" elapsed="0.000322"/>
</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-04-13T03:03:40.914288" level="INFO">GET Request : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0mw5yp32jmgv5yyn7jsipnblr0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-13T03:03:40.914467" level="INFO">GET Response : url=http://10.30.171.185:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Content-Length': '262'} 
 body={"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]} 
 </msg>
<msg time="2026-04-13T03:03:40.914602" 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-04-13T03:03:40.898802" elapsed="0.015864"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.896772" elapsed="0.017954"/>
</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-04-13T03:03:40.915067" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.914840" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.896750" elapsed="0.018517"/>
</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-04-13T03:03:40.923088" level="INFO">{"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":{"password":"admin","username":"admin"},"host":"127.0.0.1"}}]}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.917498" elapsed="0.005708"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.917048" elapsed="0.006194"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.917005" elapsed="0.006262"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.925732" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.923534" elapsed="0.002244"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.923324" elapsed="0.002488"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.923307" elapsed="0.002529"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.926395" 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-04-13T03:03:40.925998" elapsed="0.000423"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.926727" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.926490" elapsed="0.000310"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.927281" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.926972" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.926826" elapsed="0.000516"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.926473" elapsed="0.000890"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.927879" 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-04-13T03:03:40.927502" elapsed="0.000403"/>
</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>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-13T03:03:40.928187" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-13T03:03:40.927974" elapsed="0.000269"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.928711" 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 variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.928405" elapsed="0.000332"/>
</kw>
<status status="PASS" start="2026-04-13T03:03:40.928266" elapsed="0.000505"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.927956" elapsed="0.000836"/>
</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>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.928930" elapsed="0.000347"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-13T03:03:40.929741" 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-04-13T03:03:40.929423" 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-04-13T03:03:40.929903" elapsed="0.002390"/>
</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-04-13T03:03:40.916081" elapsed="0.016278"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-13T03:03:40.932538" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-13T03:03:40.932429" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.932410" elapsed="0.000239"/>
</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-04-13T03:03:40.932783" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-13T03:03:40.932853" elapsed="0.000014"/>
</return>
<msg time="2026-04-13T03:03:40.935075" level="INFO">${response_text} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</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-04-13T03:03:40.890126" elapsed="0.044978"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-13T03:03:40.935155" elapsed="0.000027"/>
</return>
<msg time="2026-04-13T03:03:40.935304" level="INFO">${resp} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-13T03:03:40.888393" elapsed="0.046937"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.935778" level="INFO">${output1} = {"network-topology:node":[{"node-id":"CONTROLLER1","netconf-node-topology:netconf-node":{"keepalive-delay":0,"connection-status":"connecting","port":1830,"tcp-only":false,"login-password-unencrypted":...</msg>
<var>${output1}</var>
<arg>${resp}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-13T03:03:40.935473" elapsed="0.000332"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.936750" level="INFO">${json_data} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-13T03:03:40.936339" elapsed="0.000439"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-13T03:03:40.936865" elapsed="0.000029"/>
</return>
<msg time="2026-04-13T03:03:40.937025" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${output}</var>
<arg>${output1}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-13T03:03:40.936015" elapsed="0.001035"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.937442" level="INFO">{'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}}]}</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.937190" elapsed="0.000298"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.941165" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.937623" elapsed="0.003570"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:40.958258" elapsed="0.000723"/>
</kw>
<msg time="2026-04-13T03:03:40.959035" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.957917" elapsed="0.001178"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return connection-status if vanadium is at least ${lower_bound},
return netconf-node-topology:connection-status otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.957534" elapsed="0.001637"/>
</kw>
<msg time="2026-04-13T03:03:40.959213" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.949419" elapsed="0.009839"/>
</kw>
<msg time="2026-04-13T03:03:40.959360" level="INFO">${connection} = connection-status</msg>
<var>${connection}</var>
<arg>connection-status</arg>
<arg>netconf-node-topology:connection-status</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.949097" elapsed="0.010288"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.959747" level="INFO">${status} = connecting</msg>
<var>${status}</var>
<arg>${node}</arg>
<arg>${connection}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.959526" elapsed="0.000246"/>
</kw>
<return>
<value>${status}</value>
<value>${output}</value>
<status status="PASS" start="2026-04-13T03:03:40.959821" elapsed="0.000030"/>
</return>
<msg time="2026-04-13T03:03:40.960011" level="INFO">${sts} = connecting</msg>
<msg time="2026-04-13T03:03:40.960063" level="INFO">${op} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts}</var>
<var>${op}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>This keyword fetches netconf endpoint information</doc>
<status status="PASS" start="2026-04-13T03:03:40.883920" elapsed="0.076167"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.960483" level="INFO">49</msg>
<arg>${i}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-13T03:03:40.960236" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;${sts}&quot; == &quot;${NTCF_OPR_STATUS}&quot;">
<break>
<status status="NOT RUN" start="2026-04-13T03:03:40.960763" elapsed="0.000018"/>
</break>
<status status="NOT RUN" start="2026-04-13T03:03:40.960601" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-13T03:03:40.960581" elapsed="0.000249"/>
</if>
<var name="${i}">49</var>
<status status="PASS" start="2026-04-13T03:03:40.883733" elapsed="0.077121"/>
</iter>
<var>${i}</var>
<value>${itr}</value>
<status status="PASS" start="2026-04-13T03:03:36.854042" elapsed="4.106846"/>
</for>
<return>
<value>${sts}</value>
<value>${op}</value>
<status status="PASS" start="2026-04-13T03:03:40.960932" elapsed="0.000025"/>
</return>
<msg time="2026-04-13T03:03:40.961124" level="INFO">${sts1} = connecting</msg>
<msg time="2026-04-13T03:03:40.961190" level="INFO">${output} = {'network-topology:node': [{'node-id': 'CONTROLLER1', 'netconf-node-topology:netconf-node': {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-u...</msg>
<var>${sts1}</var>
<var>${output}</var>
<arg>${endpoint}</arg>
<arg>${host_index}</arg>
<doc>Verify if a netconf endpoint status is connected by running in a loop</doc>
<status status="PASS" start="2026-04-13T03:03:36.853599" elapsed="4.107635"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.963259" level="INFO">${ep} = CONTROLLER1</msg>
<var>${ep}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>node-id</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.961391" elapsed="0.001896"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.967045" level="INFO">${node} = {'keepalive-delay': 0, 'connection-status': 'connecting', 'port': 1830, 'tcp-only': False, 'login-password-unencrypted': {'password': 'admin', 'username': 'admin'}, 'host': '127.0.0.1'}</msg>
<var>${node}</var>
<arg>${output['network-topology:node'][0]}</arg>
<arg>netconf-node-topology:netconf-node</arg>
<arg>${output['network-topology:node'][0]}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.963431" elapsed="0.003645"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-13T03:03:40.985319" elapsed="0.000473"/>
</kw>
<msg time="2026-04-13T03:03:40.985941" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.984900" elapsed="0.001104"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return port if vanadium is at least ${lower_bound},
return netconf-node-topology:port otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.984448" elapsed="0.001643"/>
</kw>
<msg time="2026-04-13T03:03:40.986135" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-13T03:03:40.975863" elapsed="0.010317"/>
</kw>
<msg time="2026-04-13T03:03:40.986292" level="INFO">${portKey} = port</msg>
<var>${portKey}</var>
<arg>port</arg>
<arg>netconf-node-topology:port</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-13T03:03:40.975443" elapsed="0.010875"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-13T03:03:40.986744" level="INFO">${port} = 1830</msg>
<var>${port}</var>
<arg>${node}</arg>
<arg>${portKey}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-13T03:03:40.986467" elapsed="0.000316"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-13T03:03:40.987611" level="INFO">${port} = 1830</msg>
<var>${port}</var>
<arg>${port}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-13T03:03:40.987004" elapsed="0.000650"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${endpoint}</arg>
<arg>${ep}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-13T03:03:40.987800" elapsed="0.000367"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${port}</arg>
<arg>${NETCONF_PORT}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-13T03:03:40.988356" elapsed="0.000411"/>
</kw>
<arg>${NETCONF_EP_NAME}</arg>
<arg>${THIRD_CONTROLLER_INDEX}</arg>
<doc>Verify if a netconf endpoint is mounted</doc>
<status status="PASS" start="2026-04-13T03:03:36.852580" elapsed="4.136272"/>
</kw>
<arg>30 sec</arg>
<arg>5 sec</arg>
<arg>DaeximKeywords.Verify Netconf Mount</arg>
<arg>${NETCONF_EP_NAME}</arg>
<arg>${THIRD_CONTROLLER_INDEX}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-13T03:03:36.850974" elapsed="4.137949"/>
</kw>
<doc>schedule a basic import/restore with data containg controller mounting itself as a netconf device on a cluster</doc>
<tag>create restore</tag>
<status status="PASS" start="2026-04-13T02:58:43.954229" elapsed="297.034896"/>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-13T03:03:40.989838" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-13T03:03:40.989751" elapsed="0.000392"/>
</kw>
<doc>Test suite for verifying basic import on a cluster</doc>
<status status="PASS" start="2026-04-13T02:58:43.856251" elapsed="297.133947"/>
</suite>
<status status="PASS" start="2026-04-13T02:57:18.244694" elapsed="382.746554"/>
</suite>
<statistics>
<total>
<stat pass="9" fail="0" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="3" fail="0" skip="0">absolute time export</stat>
<stat pass="1" fail="0" skip="0">cancel export</stat>
<stat pass="2" fail="0" skip="0">create backup</stat>
<stat pass="1" fail="0" skip="0">create restore</stat>
<stat pass="1" fail="0" skip="0">exclude export</stat>
<stat pass="1" fail="0" skip="0">wildcard exclude export</stat>
</tag>
<suite>
<stat name="daexim-clustering-basic.txt" id="s1" pass="9" fail="0" skip="0">daexim-clustering-basic.txt</stat>
<stat name="010-Special-Export" id="s1-s1" pass="6" fail="0" skip="0">daexim-clustering-basic.txt.010-Special-Export</stat>
<stat name="110-Cluster-Local-Export-Basic" id="s1-s2" pass="1" fail="0" skip="0">daexim-clustering-basic.txt.110-Cluster-Local-Export-Basic</stat>
<stat name="120-Cluster-Export-Basic" id="s1-s3" pass="1" fail="0" skip="0">daexim-clustering-basic.txt.120-Cluster-Export-Basic</stat>
<stat name="130-Cluster-Import-Basic" id="s1-s4" pass="1" fail="0" skip="0">daexim-clustering-basic.txt.130-Cluster-Import-Basic</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
