<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-06-03T04:56:18.094018" rpa="false" schemaversion="5">
<suite id="s1" name="openflowplugin-clustering-perf-bulkomatic.txt" source="/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/suites/openflowplugin/Performance_Bulkomatic/100K_Flows_100DPN_3Node_Cluster_Perf_Test.robot">
<kw name="ClusterManagement_Setup" owner="ClusterManagement" type="SETUP">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.796461" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-06-03T04:56:18.792744" elapsed="0.003758"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-06-03T04:56:18.796742" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-06-03T04:56:18.796617" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:18.796587" elapsed="0.000234"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.797338" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-06-03T04:56:18.796984" elapsed="0.000419"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.797933" 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-06-03T04:56:18.797587" elapsed="0.000377"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-06-03T04:56:18.798558" elapsed="0.000321"/>
</kw>
<msg time="2026-06-03T04:56:18.798991" level="INFO">${status} = PASS</msg>
<msg time="2026-06-03T04:56:18.799043" 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-06-03T04:56:18.798138" elapsed="0.000931"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.799660" 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-06-03T04:56:18.799255" elapsed="0.000433"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.800710" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:18.800436" elapsed="0.000305"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.801164" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:18.800895" elapsed="0.000298"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.801716" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-06-03T04:56:18.801366" elapsed="0.000379"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-06-03T04:56:18.805024" elapsed="0.000230"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.805749" level="INFO">${member_ip} = 10.30.171.245</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:18.805425" elapsed="0.000352"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-06-03T04:56:18.805925" elapsed="0.000283"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.807037" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:18.806714" elapsed="0.000351"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-03T04:56:18.807111" elapsed="0.000039"/>
</return>
<msg time="2026-06-03T04:56:18.807279" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-06-03T04:56:18.806417" elapsed="0.000887"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-06-03T04:56:18.807972" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.171.245:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7d3958217210&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-06-03T04:56:18.807534" elapsed="0.000592"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-06-03T04:56:18.808285" elapsed="0.000207"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-06-03T04:56:18.804362" elapsed="0.004191"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-06-03T04:56:18.804159" elapsed="0.004438"/>
</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-06-03T04:56:18.809445" elapsed="0.000190"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.810107" level="INFO">${member_ip} = 10.30.170.143</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:18.809788" elapsed="0.000346"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-06-03T04:56:18.810279" elapsed="0.000241"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.811399" 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-06-03T04:56:18.811088" elapsed="0.000339"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-03T04:56:18.811474" elapsed="0.000032"/>
</return>
<msg time="2026-06-03T04:56:18.811633" 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-06-03T04:56:18.810768" elapsed="0.000890"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-06-03T04:56:18.812216" level="INFO">Creating Session using : alias=ClusterManagement__session_2, url=http://10.30.170.143:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7d395806e2d0&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-06-03T04:56:18.811807" elapsed="0.000520"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-06-03T04:56:18.812501" 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-06-03T04:56:18.808874" elapsed="0.003875"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-06-03T04:56:18.808687" elapsed="0.004107"/>
</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-06-03T04:56:18.813788" elapsed="0.000189"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.814462" level="INFO">${member_ip} = 10.30.170.103</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:18.814127" elapsed="0.000362"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-06-03T04:56:18.814634" elapsed="0.000240"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.815683" 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-06-03T04:56:18.815388" elapsed="0.000328"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-03T04:56:18.815762" elapsed="0.000030"/>
</return>
<msg time="2026-06-03T04:56:18.815917" 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-06-03T04:56:18.815072" elapsed="0.000869"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-06-03T04:56:18.816517" level="INFO">Creating Session using : alias=ClusterManagement__session_3, url=http://10.30.170.103:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7d3958076250&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-06-03T04:56:18.816089" elapsed="0.000539"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-06-03T04:56:18.816783" 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-06-03T04:56:18.813060" elapsed="0.003969"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-06-03T04:56:18.812882" elapsed="0.004190"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-06-03T04:56:18.801806" elapsed="0.015297"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.817628" 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-06-03T04:56:18.817259" elapsed="0.000411"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.818181" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.171.245', 2: '10.30.170.143', 3: '10.30.170.103'}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-06-03T04:56:18.817830" elapsed="0.000392"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.818724" 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-06-03T04:56:18.818389" elapsed="0.000377"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-06-03T04:56:18.799945" elapsed="0.018888"/>
</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-06-03T04:56:18.792117" elapsed="0.026775"/>
</kw>
<test id="s1-t1" name="Check Shards Status And Initialize Variables" line="31">
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-06-03T04:56:18.841131" elapsed="0.000205"/>
</kw>
<msg time="2026-06-03T04:56:18.841401" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-06-03T04:56:18.840522" elapsed="0.000936"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to titanium and in case titanium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-06-03T04:56:18.840060" elapsed="0.001473"/>
</kw>
<msg time="2026-06-03T04:56:18.841578" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-06-03T04:56:18.831826" elapsed="0.009798"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to titanium and in case titanium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-06-03T04:56:18.831405" elapsed="0.010292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.842544" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:18.842268" elapsed="0.000320"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.847560" 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-06-03T04:56:18.847167" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.848038" 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-06-03T04:56:18.847737" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-03T04:56:18.848109" elapsed="0.000031"/>
</return>
<msg time="2026-06-03T04:56:18.848266" 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-06-03T04:56:18.846781" elapsed="0.001509"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-06-03T04:56:18.848457" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.849244" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-03T04:56:18.848765" elapsed="0.000505"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.849675" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:18.849438" elapsed="0.000262"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.850075" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:18.849841" elapsed="0.000260"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.852497" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:18.852182" elapsed="0.000343"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-03T04:56:18.852570" elapsed="0.000030"/>
</return>
<msg time="2026-06-03T04:56:18.852717" 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-06-03T04:56:18.851854" elapsed="0.000887"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<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-06-03T04:56:18.979946" level="INFO">${file_path_stream} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/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-06-03T04:56:18.979580" elapsed="0.000394"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-06-03T04:56:18.980743" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/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-06-03T04:56:18.980473" elapsed="0.000363">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/location.uri' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:18.980929" 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-06-03T04:56:18.980126" elapsed="0.000827"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.981504" level="INFO">${file_path} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:18.981109" elapsed="0.000457"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-06-03T04:56:18.981862" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-06-03T04:56:18.982010" 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-06-03T04:56:18.981722" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.982465" 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-06-03T04:56:18.982206" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.983464" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:18.983187" elapsed="0.000324"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.983930" 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-06-03T04:56:18.983661" elapsed="0.000295"/>
</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-06-03T04:56:18.984275" elapsed="0.000021"/>
</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-06-03T04:56:18.984488" 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-06-03T04:56:18.984654" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-06-03T04:56:18.984148" elapsed="0.000569"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-06-03T04:56:18.984005" elapsed="0.000744"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-06-03T04:56:18.984797" elapsed="0.000030"/>
</return>
<msg time="2026-06-03T04:56:18.984958" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-06-03T04:56:18.982877" elapsed="0.002106"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:18.982588" elapsed="0.002427"/>
</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-06-03T04:56:18.985182" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:18.985041" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:18.982566" elapsed="0.002716"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-06-03T04:56:18.985868" 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-06-03T04:56:18.985433" elapsed="0.000461"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-06-03T04:56:18.985944" 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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-06-03T04:56:18.978969" elapsed="0.007100"/>
</kw>
<msg time="2026-06-03T04:56:18.986153" 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-06-03T04:56:18.966477" elapsed="0.019745"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:18.998923" elapsed="0.000065"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.011489" elapsed="0.000064"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.023987" elapsed="0.000064"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.024821" elapsed="0.000061"/>
</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-06-03T04:56:19.025625" elapsed="0.000060"/>
</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-06-03T04:56:19.026239" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:19.026095" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:19.026054" elapsed="0.000282"/>
</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-06-03T04:56:19.026542" elapsed="0.000023"/>
</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-06-03T04:56:19.026749" elapsed="0.000022"/>
</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-06-03T04:56:19.026952" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-06-03T04:56:19.025967" elapsed="0.001045"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-06-03T04:56:19.025792" elapsed="0.001260"/>
</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-06-03T04:56:19.027815" elapsed="0.000059"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:19.027970" elapsed="0.000028"/>
</return>
<msg time="2026-06-03T04:56:19.028121" 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-06-03T04:56:18.961028" elapsed="0.067132"/>
</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-06-03T04:56:19.030575" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:19.030295" elapsed="0.000357">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:19.030824" 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-06-03T04:56:19.029707" elapsed="0.001206"/>
</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-06-03T04:56:19.031675" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:19.031056" elapsed="0.000758"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:19.032702" 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-06-03T04:56:19.032209" elapsed="0.000534"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:19.031878" elapsed="0.000934"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:19.031007" elapsed="0.001867"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:19.036093" 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-06-03T04:56:19.033600" elapsed="0.002582"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-06-03T04:56:19.036271" elapsed="0.000042"/>
</return>
<msg time="2026-06-03T04:56:19.036561" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:19.028721" elapsed="0.007879"/>
</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-06-03T04:56:19.038894" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:19.038642" elapsed="0.000321">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:19.039133" 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-06-03T04:56:19.038040" elapsed="0.001212"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-06-03T04:56:19.039839" elapsed="0.000066"/>
</return>
<status status="PASS" start="2026-06-03T04:56:19.039485" elapsed="0.000467"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:19.039350" elapsed="0.000667"/>
</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-06-03T04:56:19.040717" elapsed="0.000062"/>
</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-06-03T04:56:19.041589" elapsed="0.000059"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:19.041735" elapsed="0.000027"/>
</return>
<msg time="2026-06-03T04:56:19.043932" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:19.037086" elapsed="0.006886"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:19.047125" 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-06-03T04:56:19.046643" elapsed="0.000589"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:19.048555" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:19.048049" elapsed="0.000612"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-06-03T04:56:19.973868" level="INFO">GET Request : url=http://10.30.171.245: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.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-06-03T04:56:19.975147" level="INFO">GET Response : url=http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=409, reason=Conflict 
 headers={'Set-Cookie': 'JSESSIONID=node0didiybrngcpf1jw4jvi4mlolc0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Tue, 02-Jun-2026 04:56:19 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-06-03T04:56:19.975615" level="FAIL">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${response}</var>
<arg>${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-06-03T04:56:19.051035" elapsed="0.926718">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:19.048798" elapsed="0.929264">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:19.979057" elapsed="0.000159"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:19.978236" elapsed="0.001179"/>
</branch>
<status status="FAIL" start="2026-06-03T04:56:19.048748" elapsed="0.930812">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:19.981469" elapsed="0.000144"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:19.982240" elapsed="0.000062"/>
</return>
<status status="NOT RUN" start="2026-06-03T04:56:19.981945" elapsed="0.000486"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:19.981832" elapsed="0.000738"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.984204" elapsed="0.000137"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-06-03T04:56:19.984584" elapsed="0.000063"/>
</return>
<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="FAIL" start="2026-06-03T04:56:19.044391" elapsed="0.940541">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:19.985173" elapsed="0.000017"/>
</return>
<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="FAIL" start="2026-06-03T04:56:18.860767" elapsed="1.124516">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</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-06-03T04:56:19.985579" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:19.985399" elapsed="0.000300"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:19.985380" elapsed="0.000344"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:19.985760" elapsed="0.000015"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</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="FAIL" start="2026-06-03T04:56:18.856689" elapsed="1.129178">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:18.852811" elapsed="1.133130">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</branch>
<status status="FAIL" start="2026-06-03T04:56:18.852791" elapsed="1.133181">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.986210" elapsed="0.000024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.986428" elapsed="0.000022"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.986596" elapsed="0.000020"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.986817" elapsed="0.000024"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.987042" elapsed="0.000023"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.987208" elapsed="0.000020"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.987390" elapsed="0.000021"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="NOT RUN" start="2026-06-03T04:56:19.987457" elapsed="0.000016"/>
</return>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:18.851255" elapsed="1.136319">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${raft_state}</value>
<status status="NOT RUN" start="2026-06-03T04:56:19.987646" elapsed="0.000016"/>
</return>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:18.850539" elapsed="1.137206">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.987974" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:19.987837" elapsed="0.000192"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.988216" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:19.988056" elapsed="0.000214"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.988478" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:19.988293" elapsed="0.000242"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:19.987819" elapsed="0.000740"/>
</if>
<var name="${index}">1</var>
<status status="FAIL" start="2026-06-03T04:56:18.850375" elapsed="1.138228">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-06-03T04:56:18.850148" elapsed="1.138521">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:19.988726" elapsed="0.000016"/>
</return>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="FAIL" start="2026-06-03T04:56:18.846076" elapsed="1.142753">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get Length" owner="BuiltIn">
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.989010" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.989264" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:19.989130" elapsed="0.000185"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:19.989112" elapsed="0.000226"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.989485" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.989649" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:19.989720" elapsed="0.000015"/>
</return>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-06-03T04:56:18.843579" elapsed="1.146244">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-06-03T04:56:18.843362" elapsed="1.146532">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-06-03T04:56:18.843209" elapsed="1.146744">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-06-03T04:56:18.842801" elapsed="1.147250">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.990289" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-06-03T04:56:18.819580" elapsed="1.170843">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>3x</arg>
<arg>3s</arg>
<arg>ClusterManagement.Run_Karaf_Command_On_List_Or_All</arg>
<arg>${karaf_log_level}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.990619" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${flow_count_after_add}</var>
<arg>${flow_count_per_switch} * ${switch_count}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.990794" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${flow_count_after_add}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.990965" elapsed="0.000020"/>
</kw>
<kw name="Set DPN And Flow Count In Json Add" owner="BulkomaticKeywords">
<var>${temp_json_config_add}</var>
<arg>${orig_json_config_add}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Add json file.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.992472" elapsed="0.000029"/>
</kw>
<kw name="Set DPN And Flow Count In Json Get" owner="BulkomaticKeywords">
<var>${temp_json_config_get}</var>
<arg>${orig_json_config_get}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Get json file.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.992756" elapsed="0.000024"/>
</kw>
<kw name="Set DPN And Flow Count In Json Del" owner="BulkomaticKeywords">
<var>${temp_json_config_del}</var>
<arg>${orig_json_config_del}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Del json file.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.993043" elapsed="0.000024"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_add}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.993226" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_get}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.993414" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_del}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:19.993581" elapsed="0.000020"/>
</kw>
<doc>Check Status for all shards in OpenFlow application and set the logs across cluster nodes.</doc>
<status status="FAIL" start="2026-06-03T04:56:18.818952" elapsed="1.174806">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</test>
<test id="s1-t2" name="Get Inventory Config Shard Follower And Leader" line="53">
<kw name="Get InventoryConfig Shard Status" owner="ClusterOpenFlow">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.001406" 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-06-03T04:56:20.000983" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.001896" 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-06-03T04:56:20.001588" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-03T04:56:20.001968" elapsed="0.000032"/>
</return>
<msg time="2026-06-03T04:56:20.002163" 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-06-03T04:56:20.000619" elapsed="0.001569"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-06-03T04:56:20.002336" elapsed="0.000188"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.003025" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-03T04:56:20.002680" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.003460" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:20.003206" elapsed="0.000280"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.003864" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:20.003630" elapsed="0.000259"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.006459" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:20.005993" elapsed="0.000497"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-03T04:56:20.006538" elapsed="0.000029"/>
</return>
<msg time="2026-06-03T04:56:20.006688" 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-06-03T04:56:20.005658" elapsed="0.001055"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<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-06-03T04:56:20.071981" level="INFO">${file_path_stream} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/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-06-03T04:56:20.071606" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-06-03T04:56:20.072754" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/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-06-03T04:56:20.072515" elapsed="0.000313">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/location.uri' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:20.072921" 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-06-03T04:56:20.072165" elapsed="0.000780"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.073496" level="INFO">${file_path} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:20.073100" elapsed="0.000423"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-06-03T04:56:20.073813" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-06-03T04:56:20.073948" 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-06-03T04:56:20.073675" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.074430" 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-06-03T04:56:20.074163" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.075408" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:20.075141" elapsed="0.000313"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.075878" 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-06-03T04:56:20.075613" elapsed="0.000291"/>
</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-06-03T04:56:20.076215" elapsed="0.000021"/>
</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-06-03T04:56:20.076434" elapsed="0.000031"/>
</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-06-03T04:56:20.076608" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-06-03T04:56:20.076089" elapsed="0.000576"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-06-03T04:56:20.075954" elapsed="0.000742"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-06-03T04:56:20.076741" elapsed="0.000027"/>
</return>
<msg time="2026-06-03T04:56:20.076931" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-06-03T04:56:20.074823" elapsed="0.002134"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:20.074543" elapsed="0.002446"/>
</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-06-03T04:56:20.077156" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:20.077014" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:20.074524" elapsed="0.002709"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.077825" 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-06-03T04:56:20.077387" elapsed="0.000465"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-06-03T04:56:20.077902" elapsed="0.000028"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-06-03T04:56:20.070812" elapsed="0.007337"/>
</kw>
<msg time="2026-06-03T04:56:20.078225" 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-06-03T04:56:20.057522" elapsed="0.020842"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.099284" elapsed="0.000029"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.119891" 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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.140572" 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-06-03T04:56:20.140954" 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-06-03T04:56:20.141224" 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-06-03T04:56:20.142056" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:20.141804" elapsed="0.000328"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:20.141752" elapsed="0.000416"/>
</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-06-03T04:56:20.143035" elapsed="0.000053"/>
</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-06-03T04:56:20.143889" elapsed="0.000053"/>
</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-06-03T04:56:20.144729" elapsed="0.000052"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-06-03T04:56:20.141708" elapsed="0.003119"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-06-03T04:56:20.141513" elapsed="0.003372"/>
</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-06-03T04:56:20.145088" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:20.145469" elapsed="0.000018"/>
</return>
<msg time="2026-06-03T04:56:20.145589" 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-06-03T04:56:20.037318" elapsed="0.108327"/>
</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-06-03T04:56:20.148012" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:20.147221" elapsed="0.000899">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:20.148239" 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-06-03T04:56:20.146500" elapsed="0.001833"/>
</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-06-03T04:56:20.149031" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:20.148582" elapsed="0.000598"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.150338" 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-06-03T04:56:20.149714" elapsed="0.000732"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:20.149243" elapsed="0.001278"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:20.148561" elapsed="0.002028"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.153337" 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-06-03T04:56:20.150738" elapsed="0.002713"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-06-03T04:56:20.153690" elapsed="0.000031"/>
</return>
<msg time="2026-06-03T04:56:20.153848" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:20.146014" elapsed="0.007858"/>
</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-06-03T04:56:20.156017" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:20.155263" elapsed="0.000861">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:20.156248" 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-06-03T04:56:20.154585" elapsed="0.001757"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-06-03T04:56:20.156877" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-06-03T04:56:20.156593" elapsed="0.000395"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:20.156572" elapsed="0.000481"/>
</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-06-03T04:56:20.157198" 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-06-03T04:56:20.157511" elapsed="0.000026"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:20.157739" elapsed="0.000016"/>
</return>
<msg time="2026-06-03T04:56:20.159932" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:20.154199" elapsed="0.005759"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.162132" 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-06-03T04:56:20.161674" elapsed="0.000544"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:20.162925" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:20.162473" elapsed="0.000536"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-06-03T04:56:20.181398" level="INFO">GET Request : url=http://10.30.171.245: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.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0didiybrngcpf1jw4jvi4mlolc0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-06-03T04:56:20.181625" level="INFO">GET Response : url=http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-06-03T04:56:20.181946" level="FAIL">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${response}</var>
<arg>${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-06-03T04:56:20.165412" elapsed="0.017587">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:20.163165" elapsed="0.020007">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:20.183641" elapsed="0.000108"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:20.183319" elapsed="0.000545"/>
</branch>
<status status="FAIL" start="2026-06-03T04:56:20.163146" elapsed="0.020803">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:20.184656" elapsed="0.000039"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:20.185052" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-06-03T04:56:20.184973" elapsed="0.000426"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:20.184946" elapsed="0.000595"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.185862" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-06-03T04:56:20.186489" elapsed="0.000039"/>
</return>
<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="FAIL" start="2026-06-03T04:56:20.160346" elapsed="0.026401">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:20.186914" elapsed="0.000035"/>
</return>
<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="FAIL" start="2026-06-03T04:56:20.014784" elapsed="0.172353">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</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-06-03T04:56:20.187786" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:20.187355" elapsed="0.000592"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:20.187310" elapsed="0.000690"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:20.188071" elapsed="0.000032"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</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="FAIL" start="2026-06-03T04:56:20.010670" elapsed="0.177630">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:20.006782" elapsed="0.181713">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</branch>
<status status="FAIL" start="2026-06-03T04:56:20.006764" elapsed="0.181802">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.189122" elapsed="0.000057"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.189579" elapsed="0.000048"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.189947" elapsed="0.000048"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.190523" elapsed="0.000054"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.191015" elapsed="0.000051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.191412" elapsed="0.000049"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.191779" elapsed="0.000046"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="NOT RUN" start="2026-06-03T04:56:20.191997" elapsed="0.000039"/>
</return>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:20.005051" elapsed="0.187185">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${raft_state}</value>
<status status="NOT RUN" start="2026-06-03T04:56:20.192425" elapsed="0.000036"/>
</return>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:20.004316" elapsed="0.188326">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.193092" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:20.192898" elapsed="0.000250"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.193306" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:20.193171" elapsed="0.000192"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.193546" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:20.193400" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:20.192858" elapsed="0.000767"/>
</if>
<var name="${index}">1</var>
<status status="FAIL" start="2026-06-03T04:56:20.004155" elapsed="0.189511">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-06-03T04:56:20.003942" elapsed="0.189783">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:20.193779" elapsed="0.000016"/>
</return>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="FAIL" start="2026-06-03T04:56:19.999869" elapsed="0.194009">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get Length" owner="BuiltIn">
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.194052" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.194277" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:20.194138" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:20.194121" elapsed="0.000234"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.194528" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:20.194693" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:20.194758" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-06-03T04:56:19.997464" elapsed="0.197394">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.202233" 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-06-03T04:56:21.201598" elapsed="0.000680"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.202993" 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-06-03T04:56:21.202540" elapsed="0.000491"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-03T04:56:21.203139" elapsed="0.000051"/>
</return>
<msg time="2026-06-03T04:56:21.203404" 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-06-03T04:56:21.201024" elapsed="0.002418"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-06-03T04:56:21.203665" elapsed="0.000245"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.204503" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-03T04:56:21.204140" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.204988" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:21.204746" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.205411" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:21.205157" elapsed="0.000280"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.207851" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:21.207556" elapsed="0.000322"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-03T04:56:21.207923" elapsed="0.000028"/>
</return>
<msg time="2026-06-03T04:56:21.208071" 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-06-03T04:56:21.207197" elapsed="0.000899"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<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-06-03T04:56:21.272953" level="INFO">${file_path_stream} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/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-06-03T04:56:21.272576" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-06-03T04:56:21.273738" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/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-06-03T04:56:21.273485" elapsed="0.000329">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/location.uri' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:21.273907" 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-06-03T04:56:21.273140" elapsed="0.000791"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.274489" level="INFO">${file_path} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:21.274094" elapsed="0.000422"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-06-03T04:56:21.274812" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-06-03T04:56:21.274964" 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-06-03T04:56:21.274670" elapsed="0.000319"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.275403" 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-06-03T04:56:21.275140" elapsed="0.000307"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.276350" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:21.276101" elapsed="0.000307"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.276860" 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-06-03T04:56:21.276593" elapsed="0.000292"/>
</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-06-03T04:56:21.277197" elapsed="0.000021"/>
</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-06-03T04:56:21.277417" 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-06-03T04:56:21.277585" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-06-03T04:56:21.277071" elapsed="0.000570"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-06-03T04:56:21.276933" elapsed="0.000738"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-06-03T04:56:21.277716" elapsed="0.000027"/>
</return>
<msg time="2026-06-03T04:56:21.277871" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-06-03T04:56:21.275795" elapsed="0.002100"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:21.275514" elapsed="0.002412"/>
</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-06-03T04:56:21.278089" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:21.277951" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:21.275495" elapsed="0.002668"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.278757" 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-06-03T04:56:21.278295" elapsed="0.000526"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-06-03T04:56:21.278872" elapsed="0.000028"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-06-03T04:56:21.271767" elapsed="0.007326"/>
</kw>
<msg time="2026-06-03T04:56:21.279162" 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-06-03T04:56:21.258693" elapsed="0.020598"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.300059" elapsed="0.000029"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.320630" 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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.341166" 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-06-03T04:56:21.341653" 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-06-03T04:56:21.341942" elapsed="0.000022"/>
</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-06-03T04:56:21.342735" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:21.342485" elapsed="0.000325"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:21.342433" elapsed="0.000413"/>
</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-06-03T04:56:21.343650" elapsed="0.000053"/>
</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-06-03T04:56:21.344490" elapsed="0.000050"/>
</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-06-03T04:56:21.345311" elapsed="0.000086"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-06-03T04:56:21.342389" elapsed="0.003058"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-06-03T04:56:21.342210" elapsed="0.003293"/>
</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-06-03T04:56:21.345702" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:21.346078" elapsed="0.000017"/>
</return>
<msg time="2026-06-03T04:56:21.346200" 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-06-03T04:56:21.238498" elapsed="0.107729"/>
</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-06-03T04:56:21.348381" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:21.347698" elapsed="0.000791">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:21.348608" 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-06-03T04:56:21.347004" elapsed="0.001700"/>
</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-06-03T04:56:21.349503" elapsed="0.000080"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:21.348932" elapsed="0.000725"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.350869" 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-06-03T04:56:21.350217" elapsed="0.000741"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:21.349719" elapsed="0.001314"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:21.348912" elapsed="0.002180"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.353858" 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-06-03T04:56:21.351241" elapsed="0.002713"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-06-03T04:56:21.354209" elapsed="0.000030"/>
</return>
<msg time="2026-06-03T04:56:21.354380" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:21.346636" elapsed="0.007770"/>
</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-06-03T04:56:21.356469" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:21.355786" elapsed="0.000784">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:21.356689" 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-06-03T04:56:21.355098" elapsed="0.001686"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-06-03T04:56:21.357295" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-06-03T04:56:21.357012" elapsed="0.000478"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:21.356993" elapsed="0.000561"/>
</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-06-03T04:56:21.357700" 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-06-03T04:56:21.357991" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:21.358243" elapsed="0.000018"/>
</return>
<msg time="2026-06-03T04:56:21.360247" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:21.354732" elapsed="0.005541"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.362454" 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-06-03T04:56:21.361967" elapsed="0.000574"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:21.363227" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:21.362776" elapsed="0.000534"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-06-03T04:56:21.379272" level="INFO">GET Request : url=http://10.30.171.245: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.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0didiybrngcpf1jw4jvi4mlolc0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-06-03T04:56:21.379655" level="INFO">GET Response : url=http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-06-03T04:56:21.380098" level="FAIL">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${response}</var>
<arg>${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-06-03T04:56:21.365762" elapsed="0.015927">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:21.363564" elapsed="0.018400">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:21.382837" elapsed="0.000177"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:21.382264" elapsed="0.000935"/>
</branch>
<status status="FAIL" start="2026-06-03T04:56:21.363544" elapsed="0.019745">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:21.383963" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:21.384332" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-06-03T04:56:21.384279" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:21.384252" elapsed="0.000318"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.384767" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-06-03T04:56:21.385135" elapsed="0.000023"/>
</return>
<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="FAIL" start="2026-06-03T04:56:21.360654" elapsed="0.024640">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:21.385425" elapsed="0.000023"/>
</return>
<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="FAIL" start="2026-06-03T04:56:21.216243" elapsed="0.169325">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</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-06-03T04:56:21.385939" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:21.385701" elapsed="0.000338"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:21.385677" elapsed="0.000395"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:21.386117" elapsed="0.000020"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</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="FAIL" start="2026-06-03T04:56:21.212163" elapsed="0.174100">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:21.208167" elapsed="0.178197">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</branch>
<status status="FAIL" start="2026-06-03T04:56:21.208147" elapsed="0.178279">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.386764" elapsed="0.000034"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.387030" elapsed="0.000029"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.387261" elapsed="0.000028"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.387582" elapsed="0.000033"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.387888" elapsed="0.000032"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.388114" elapsed="0.000028"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.388338" elapsed="0.000071"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="NOT RUN" start="2026-06-03T04:56:21.388476" elapsed="0.000022"/>
</return>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:21.206581" elapsed="0.182038">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${raft_state}</value>
<status status="NOT RUN" start="2026-06-03T04:56:21.388769" elapsed="0.000022"/>
</return>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:21.205861" elapsed="0.183045">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.389235" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:21.389039" elapsed="0.000273"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.389557" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:21.389344" elapsed="0.000290"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.389855" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:21.389667" elapsed="0.000259"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:21.389013" elapsed="0.000945"/>
</if>
<var name="${index}">1</var>
<status status="FAIL" start="2026-06-03T04:56:21.205702" elapsed="0.184313">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-06-03T04:56:21.205491" elapsed="0.184605">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:21.390170" elapsed="0.000021"/>
</return>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="FAIL" start="2026-06-03T04:56:21.199951" elapsed="0.190364">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get Length" owner="BuiltIn">
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.390584" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.390926" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:21.390707" elapsed="0.000300"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:21.390683" elapsed="0.000357"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.391220" elapsed="0.000024"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:21.391537" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:21.391604" elapsed="0.000014"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-06-03T04:56:21.195809" elapsed="0.195895">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.402514" 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-06-03T04:56:22.401588" elapsed="0.000958"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.403022" 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-06-03T04:56:22.402712" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-03T04:56:22.403095" elapsed="0.000039"/>
</return>
<msg time="2026-06-03T04:56:22.403263" 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-06-03T04:56:22.400736" elapsed="0.002552"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-06-03T04:56:22.403459" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.404119" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-03T04:56:22.403788" elapsed="0.000357"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.404560" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:22.404297" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.404958" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:22.404726" elapsed="0.000257"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.407470" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:22.407158" elapsed="0.000339"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-03T04:56:22.407542" elapsed="0.000029"/>
</return>
<msg time="2026-06-03T04:56:22.407690" 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-06-03T04:56:22.406819" elapsed="0.000896"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<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-06-03T04:56:22.471963" level="INFO">${file_path_stream} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/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-06-03T04:56:22.471580" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-06-03T04:56:22.472751" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/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-06-03T04:56:22.472497" elapsed="0.000330">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/location.uri' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:22.472925" 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-06-03T04:56:22.472153" elapsed="0.000796"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.473511" level="INFO">${file_path} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:22.473108" elapsed="0.000430"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-06-03T04:56:22.473835" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-06-03T04:56:22.473999" 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-06-03T04:56:22.473693" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.474430" 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-06-03T04:56:22.474171" elapsed="0.000304"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.475436" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:22.475143" elapsed="0.000339"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.475910" 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-06-03T04:56:22.475644" elapsed="0.000291"/>
</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-06-03T04:56:22.476257" 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-06-03T04:56:22.476481" elapsed="0.000023"/>
</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-06-03T04:56:22.476648" elapsed="0.000020"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-06-03T04:56:22.476131" elapsed="0.000573"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-06-03T04:56:22.475992" elapsed="0.000742"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-06-03T04:56:22.476779" elapsed="0.000030"/>
</return>
<msg time="2026-06-03T04:56:22.476939" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-06-03T04:56:22.474835" elapsed="0.002129"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:22.474547" elapsed="0.002448"/>
</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-06-03T04:56:22.477158" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:22.477020" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:22.474525" elapsed="0.002708"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.477818" 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-06-03T04:56:22.477383" elapsed="0.000462"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-06-03T04:56:22.477893" 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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-06-03T04:56:22.470780" elapsed="0.007342"/>
</kw>
<msg time="2026-06-03T04:56:22.478235" 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-06-03T04:56:22.457645" elapsed="0.020734"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.499061" elapsed="0.000028"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.519592" elapsed="0.000027"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.540143" elapsed="0.000027"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.540573" 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-06-03T04:56:22.540841" 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-06-03T04:56:22.541665" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:22.541411" elapsed="0.000329"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:22.541313" elapsed="0.000462"/>
</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-06-03T04:56:22.542589" elapsed="0.000051"/>
</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-06-03T04:56:22.543427" elapsed="0.000051"/>
</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-06-03T04:56:22.544248" elapsed="0.000052"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-06-03T04:56:22.541270" elapsed="0.003078"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-06-03T04:56:22.541105" elapsed="0.003314"/>
</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-06-03T04:56:22.544645" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:22.545009" elapsed="0.000017"/>
</return>
<msg time="2026-06-03T04:56:22.545130" 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-06-03T04:56:22.437358" elapsed="0.107798"/>
</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-06-03T04:56:22.547359" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:22.546689" elapsed="0.000790">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:22.547596" 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-06-03T04:56:22.545993" elapsed="0.001697"/>
</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-06-03T04:56:22.548418" elapsed="0.000077"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:22.547918" elapsed="0.000651"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.549885" 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-06-03T04:56:22.549133" elapsed="0.000842"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:22.548665" elapsed="0.001383"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:22.547898" elapsed="0.002209"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.552748" 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-06-03T04:56:22.550256" elapsed="0.002598"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-06-03T04:56:22.553092" elapsed="0.000030"/>
</return>
<msg time="2026-06-03T04:56:22.553249" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:22.545620" elapsed="0.007653"/>
</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-06-03T04:56:22.555451" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:22.554771" elapsed="0.000780">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:22.555670" 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-06-03T04:56:22.554080" elapsed="0.001684"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-06-03T04:56:22.556275" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-06-03T04:56:22.555991" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:22.555971" elapsed="0.000496"/>
</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-06-03T04:56:22.556716" elapsed="0.000046"/>
</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-06-03T04:56:22.557042" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:22.557265" elapsed="0.000018"/>
</return>
<msg time="2026-06-03T04:56:22.559383" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:22.553707" elapsed="0.005703"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.561608" 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-06-03T04:56:22.561067" elapsed="0.000627"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:22.562408" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:22.561935" elapsed="0.000558"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-06-03T04:56:22.576305" level="INFO">GET Request : url=http://10.30.171.245: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.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0didiybrngcpf1jw4jvi4mlolc0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-06-03T04:56:22.576743" level="INFO">GET Response : url=http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-06-03T04:56:22.577232" level="FAIL">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${response}</var>
<arg>${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-06-03T04:56:22.564864" elapsed="0.013970">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:22.562652" elapsed="0.016452">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:22.579852" elapsed="0.000170"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:22.579339" elapsed="0.000863"/>
</branch>
<status status="FAIL" start="2026-06-03T04:56:22.562632" elapsed="0.017709">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:22.581504" elapsed="0.000039"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:22.581934" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-06-03T04:56:22.581876" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:22.581848" 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>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.582352" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-06-03T04:56:22.582740" elapsed="0.000024"/>
</return>
<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="FAIL" start="2026-06-03T04:56:22.559773" elapsed="0.023131">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:22.583012" elapsed="0.000022"/>
</return>
<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="FAIL" start="2026-06-03T04:56:22.415912" elapsed="0.167238">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</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-06-03T04:56:22.583543" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:22.583281" elapsed="0.000370"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:22.583258" elapsed="0.000426"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:22.583728" elapsed="0.000020"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</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="FAIL" start="2026-06-03T04:56:22.411836" elapsed="0.172034">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:22.407786" elapsed="0.176181">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</branch>
<status status="FAIL" start="2026-06-03T04:56:22.407767" elapsed="0.176242">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.584328" elapsed="0.000054"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.584619" elapsed="0.000028"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.584848" elapsed="0.000029"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.585152" elapsed="0.000032"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.585659" elapsed="0.000035"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.585895" elapsed="0.000028"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.586118" elapsed="0.000027"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="NOT RUN" start="2026-06-03T04:56:22.586207" elapsed="0.000022"/>
</return>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:22.406202" elapsed="0.180155">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${raft_state}</value>
<status status="NOT RUN" start="2026-06-03T04:56:22.586475" elapsed="0.000021"/>
</return>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:22.405477" elapsed="0.181133">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.586926" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:22.586736" elapsed="0.000269"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.587221" elapsed="0.000084"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:22.587037" elapsed="0.000342"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.587610" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:22.587414" elapsed="0.000266"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:22.586711" elapsed="0.001001"/>
</if>
<var name="${index}">1</var>
<status status="FAIL" start="2026-06-03T04:56:22.405300" elapsed="0.182469">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-06-03T04:56:22.405087" elapsed="0.182765">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:22.587929" elapsed="0.000021"/>
</return>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="FAIL" start="2026-06-03T04:56:22.399083" elapsed="0.188985">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get Length" owner="BuiltIn">
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.588309" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.588640" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:22.588453" elapsed="0.000259"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:22.588429" elapsed="0.000314"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.588919" elapsed="0.000028"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:22.589154" elapsed="0.000027"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:22.589243" elapsed="0.000020"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-06-03T04:56:22.392900" elapsed="0.196587">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.600545" 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-06-03T04:56:23.600055" elapsed="0.000522"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.601056" 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-06-03T04:56:23.600743" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-03T04:56:23.601131" elapsed="0.000039"/>
</return>
<msg time="2026-06-03T04:56:23.601300" 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-06-03T04:56:23.599677" elapsed="0.001648"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-06-03T04:56:23.601494" elapsed="0.000173"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.602175" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-03T04:56:23.601835" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.602617" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:23.602359" elapsed="0.000288"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.603029" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:23.602792" elapsed="0.000263"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.605450" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:23.605138" elapsed="0.000339"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-03T04:56:23.605522" elapsed="0.000029"/>
</return>
<msg time="2026-06-03T04:56:23.605675" 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-06-03T04:56:23.604804" elapsed="0.000895"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<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-06-03T04:56:23.670152" level="INFO">${file_path_stream} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/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-06-03T04:56:23.669766" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-06-03T04:56:23.670972" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/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-06-03T04:56:23.670694" elapsed="0.000352">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/location.uri' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:23.671139" 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-06-03T04:56:23.670342" elapsed="0.000821"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.671717" level="INFO">${file_path} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:23.671321" elapsed="0.000422"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-06-03T04:56:23.672043" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-06-03T04:56:23.672202" 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-06-03T04:56:23.671897" elapsed="0.000330"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.672641" 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-06-03T04:56:23.672398" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.673635" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:23.673383" elapsed="0.000296"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.674099" 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-06-03T04:56:23.673831" elapsed="0.000293"/>
</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-06-03T04:56:23.674484" 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-06-03T04:56:23.674684" 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-06-03T04:56:23.674850" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-06-03T04:56:23.674317" elapsed="0.000590"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-06-03T04:56:23.674177" elapsed="0.000759"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-06-03T04:56:23.674996" elapsed="0.000030"/>
</return>
<msg time="2026-06-03T04:56:23.675158" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-06-03T04:56:23.673053" elapsed="0.002130"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:23.672763" elapsed="0.002453"/>
</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-06-03T04:56:23.675398" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:23.675241" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:23.672742" elapsed="0.002734"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.676050" 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-06-03T04:56:23.675614" elapsed="0.000463"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-06-03T04:56:23.676126" elapsed="0.000028"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-06-03T04:56:23.668965" elapsed="0.007387"/>
</kw>
<msg time="2026-06-03T04:56:23.676434" 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-06-03T04:56:23.655736" elapsed="0.020827"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.697867" elapsed="0.000058"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.718647" elapsed="0.000034"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.739213" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.739764" 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-06-03T04:56:23.740056" elapsed="0.000023"/>
</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-06-03T04:56:23.740905" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:23.740639" elapsed="0.000344"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:23.740583" elapsed="0.000438"/>
</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-06-03T04:56:23.741835" elapsed="0.000052"/>
</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-06-03T04:56:23.742683" elapsed="0.000051"/>
</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-06-03T04:56:23.743557" elapsed="0.000052"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-06-03T04:56:23.740531" elapsed="0.003126"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-06-03T04:56:23.740335" elapsed="0.003385"/>
</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-06-03T04:56:23.743921" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:23.744325" elapsed="0.000021"/>
</return>
<msg time="2026-06-03T04:56:23.744501" 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-06-03T04:56:23.635498" elapsed="0.109031"/>
</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-06-03T04:56:23.746830" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:23.746091" elapsed="0.000851">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:23.747064" 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-06-03T04:56:23.745332" elapsed="0.001828"/>
</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-06-03T04:56:23.747987" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:23.747514" elapsed="0.000642"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.749337" 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-06-03T04:56:23.748703" elapsed="0.000741"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:23.748219" elapsed="0.001338"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:23.747493" elapsed="0.002127"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.752466" 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-06-03T04:56:23.749773" elapsed="0.002792"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-06-03T04:56:23.752850" elapsed="0.000034"/>
</return>
<msg time="2026-06-03T04:56:23.753013" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:23.744922" elapsed="0.008117"/>
</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-06-03T04:56:23.755124" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:23.754455" elapsed="0.000771">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:23.755352" 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-06-03T04:56:23.753757" elapsed="0.001766"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-06-03T04:56:23.756040" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-06-03T04:56:23.755754" elapsed="0.000397"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:23.755734" elapsed="0.000501"/>
</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-06-03T04:56:23.756401" elapsed="0.000023"/>
</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-06-03T04:56:23.756703" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:23.756928" elapsed="0.000017"/>
</return>
<msg time="2026-06-03T04:56:23.758940" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:23.753381" elapsed="0.005585"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.761199" 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-06-03T04:56:23.760727" elapsed="0.000559"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:23.762004" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:23.761547" elapsed="0.000542"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-06-03T04:56:23.777275" level="INFO">GET Request : url=http://10.30.171.245: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.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0didiybrngcpf1jw4jvi4mlolc0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-06-03T04:56:23.777668" level="INFO">GET Response : url=http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-06-03T04:56:23.778169" level="FAIL">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${response}</var>
<arg>${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-06-03T04:56:23.764590" elapsed="0.015184">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:23.762249" elapsed="0.017801">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:23.780857" elapsed="0.000185"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:23.780285" elapsed="0.000958"/>
</branch>
<status status="FAIL" start="2026-06-03T04:56:23.762229" elapsed="0.019187">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:23.782511" elapsed="0.000061"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:23.783099" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-06-03T04:56:23.783014" elapsed="0.000287"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:23.782970" elapsed="0.000501"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.783795" elapsed="0.000049"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-06-03T04:56:23.784490" elapsed="0.000041"/>
</return>
<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="FAIL" start="2026-06-03T04:56:23.759335" elapsed="0.025480">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:23.784993" elapsed="0.000035"/>
</return>
<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="FAIL" start="2026-06-03T04:56:23.614064" elapsed="0.171151">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</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-06-03T04:56:23.785751" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:23.785463" elapsed="0.000360"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:23.785423" elapsed="0.000424"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:23.785878" elapsed="0.000014"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</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="FAIL" start="2026-06-03T04:56:23.609774" elapsed="0.176206">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:23.605770" elapsed="0.180278">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</branch>
<status status="FAIL" start="2026-06-03T04:56:23.605751" elapsed="0.180327">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.786310" elapsed="0.000024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.786547" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.786712" elapsed="0.000020"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.786930" elapsed="0.000023"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.787153" elapsed="0.000022"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.787317" elapsed="0.000020"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.787498" elapsed="0.000021"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="NOT RUN" start="2026-06-03T04:56:23.787563" elapsed="0.000017"/>
</return>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:23.604197" elapsed="0.183471">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${raft_state}</value>
<status status="NOT RUN" start="2026-06-03T04:56:23.787737" elapsed="0.000016"/>
</return>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:23.603499" elapsed="0.184333">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.788059" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:23.787922" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.788270" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:23.788136" elapsed="0.000187"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.788498" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:23.788348" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:23.787905" elapsed="0.000665"/>
</if>
<var name="${index}">1</var>
<status status="FAIL" start="2026-06-03T04:56:23.603320" elapsed="0.185324">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-06-03T04:56:23.603109" elapsed="0.185600">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:23.788780" elapsed="0.000015"/>
</return>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="FAIL" start="2026-06-03T04:56:23.598950" elapsed="0.189929">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get Length" owner="BuiltIn">
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.789055" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.789274" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:23.789142" elapsed="0.000182"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:23.789125" elapsed="0.000221"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.789492" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:23.789655" elapsed="0.000019"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:23.789718" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-06-03T04:56:23.590664" elapsed="0.199153">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.799110" 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-06-03T04:56:24.798442" elapsed="0.000713"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.799873" 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-06-03T04:56:24.799419" elapsed="0.000491"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-03T04:56:24.799979" elapsed="0.000054"/>
</return>
<msg time="2026-06-03T04:56:24.800222" 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-06-03T04:56:24.797874" elapsed="0.002383"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-06-03T04:56:24.800500" elapsed="0.000247"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.801477" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-03T04:56:24.800973" elapsed="0.000542"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.802079" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:24.801736" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.802698" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:24.802323" elapsed="0.000412"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.805503" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:24.805193" elapsed="0.000337"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-03T04:56:24.805576" elapsed="0.000028"/>
</return>
<msg time="2026-06-03T04:56:24.805722" 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-06-03T04:56:24.804855" elapsed="0.000891"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<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-06-03T04:56:24.870424" level="INFO">${file_path_stream} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/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-06-03T04:56:24.870012" elapsed="0.000445"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-06-03T04:56:24.871271" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/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-06-03T04:56:24.871019" elapsed="0.000325">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/location.uri' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:24.871457" 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-06-03T04:56:24.870692" elapsed="0.000789"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.872035" level="INFO">${file_path} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:24.871639" elapsed="0.000423"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-06-03T04:56:24.872375" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-06-03T04:56:24.872533" 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-06-03T04:56:24.872218" elapsed="0.000340"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.872957" 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-06-03T04:56:24.872709" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.873957" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:24.873702" elapsed="0.000300"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.874444" 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-06-03T04:56:24.874153" elapsed="0.000316"/>
</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-06-03T04:56:24.874786" elapsed="0.000026"/>
</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-06-03T04:56:24.874987" 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-06-03T04:56:24.875153" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-06-03T04:56:24.874660" elapsed="0.000549"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-06-03T04:56:24.874522" elapsed="0.000718"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-06-03T04:56:24.875286" elapsed="0.000031"/>
</return>
<msg time="2026-06-03T04:56:24.875465" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-06-03T04:56:24.873388" elapsed="0.002102"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:24.873076" elapsed="0.002446"/>
</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-06-03T04:56:24.875686" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:24.875547" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:24.873054" elapsed="0.002706"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.876351" 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-06-03T04:56:24.875893" elapsed="0.000502"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-06-03T04:56:24.876443" elapsed="0.000028"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-06-03T04:56:24.869212" elapsed="0.007452"/>
</kw>
<msg time="2026-06-03T04:56:24.876732" 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-06-03T04:56:24.855804" elapsed="0.021059"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.897586" elapsed="0.000029"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.918323" elapsed="0.000031"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.938934" 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-06-03T04:56:24.939314" 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-06-03T04:56:24.939838" elapsed="0.000023"/>
</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-06-03T04:56:24.940632" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:24.940377" elapsed="0.000331"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:24.940311" elapsed="0.000432"/>
</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-06-03T04:56:24.941580" elapsed="0.000051"/>
</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-06-03T04:56:24.942423" elapsed="0.000051"/>
</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-06-03T04:56:24.943247" elapsed="0.000052"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-06-03T04:56:24.940269" elapsed="0.003080"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-06-03T04:56:24.940108" elapsed="0.003349"/>
</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-06-03T04:56:24.943662" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:24.944025" elapsed="0.000018"/>
</return>
<msg time="2026-06-03T04:56:24.944148" 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-06-03T04:56:24.835437" elapsed="0.108737"/>
</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-06-03T04:56:24.946310" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:24.945638" elapsed="0.000795">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:24.946552" 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-06-03T04:56:24.944941" elapsed="0.001705"/>
</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-06-03T04:56:24.947321" elapsed="0.000191"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:24.946873" elapsed="0.000715"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.948753" 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-06-03T04:56:24.948112" elapsed="0.000730"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:24.947651" elapsed="0.001288"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:24.946853" elapsed="0.002150"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.951795" 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-06-03T04:56:24.949153" elapsed="0.002739"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-06-03T04:56:24.952131" elapsed="0.000030"/>
</return>
<msg time="2026-06-03T04:56:24.952287" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:24.944554" elapsed="0.007758"/>
</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-06-03T04:56:24.954444" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:24.953759" elapsed="0.000787">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:24.954666" 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-06-03T04:56:24.953069" elapsed="0.001692"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-06-03T04:56:24.955273" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-06-03T04:56:24.954989" elapsed="0.000468"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:24.954969" elapsed="0.000551"/>
</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-06-03T04:56:24.955665" elapsed="0.000023"/>
</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-06-03T04:56:24.955960" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:24.956321" elapsed="0.000017"/>
</return>
<msg time="2026-06-03T04:56:24.958403" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:24.952688" elapsed="0.005743"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.960595" 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-06-03T04:56:24.960116" elapsed="0.000564"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:24.961404" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:24.960917" elapsed="0.000573"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-06-03T04:56:24.975774" level="INFO">GET Request : url=http://10.30.171.245: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.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0didiybrngcpf1jw4jvi4mlolc0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-06-03T04:56:24.976085" level="INFO">GET Response : url=http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-06-03T04:56:24.976562" level="FAIL">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${response}</var>
<arg>${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-06-03T04:56:24.963932" elapsed="0.014182">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:24.961647" elapsed="0.016770">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:24.979122" elapsed="0.000169"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:24.978654" elapsed="0.000849"/>
</branch>
<status status="FAIL" start="2026-06-03T04:56:24.961627" elapsed="0.018012">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:24.980696" elapsed="0.000058"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:24.981277" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-06-03T04:56:24.981191" elapsed="0.000371"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:24.981149" elapsed="0.000553"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.981963" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-06-03T04:56:24.982372" elapsed="0.000026"/>
</return>
<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="FAIL" start="2026-06-03T04:56:24.958802" elapsed="0.023742">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:24.982658" elapsed="0.000023"/>
</return>
<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="FAIL" start="2026-06-03T04:56:24.813927" elapsed="0.168932">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</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-06-03T04:56:24.983260" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:24.983003" elapsed="0.000386"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:24.982977" elapsed="0.000449"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:24.983476" elapsed="0.000022"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</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="FAIL" start="2026-06-03T04:56:24.809841" elapsed="0.173786">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:24.805819" elapsed="0.177912">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</branch>
<status status="FAIL" start="2026-06-03T04:56:24.805799" elapsed="0.177977">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.984118" elapsed="0.000035"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.984418" elapsed="0.000032"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.984663" elapsed="0.000030"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.984985" elapsed="0.000033"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.985313" elapsed="0.000038"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.985630" elapsed="0.000031"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.985878" elapsed="0.000031"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="NOT RUN" start="2026-06-03T04:56:24.985975" elapsed="0.000023"/>
</return>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:24.804255" elapsed="0.181873">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${raft_state}</value>
<status status="NOT RUN" start="2026-06-03T04:56:24.986230" elapsed="0.000022"/>
</return>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:24.803425" elapsed="0.182966">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.986731" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:24.986527" elapsed="0.000284"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.987044" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:24.986846" elapsed="0.000275"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.987373" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:24.987154" elapsed="0.000296"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:24.986501" elapsed="0.000982"/>
</if>
<var name="${index}">1</var>
<status status="FAIL" start="2026-06-03T04:56:24.803161" elapsed="0.184383">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-06-03T04:56:24.802811" elapsed="0.184817">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:24.987706" elapsed="0.000024"/>
</return>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="FAIL" start="2026-06-03T04:56:24.796806" elapsed="0.191048">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get Length" owner="BuiltIn">
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.988169" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.988521" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:24.988298" elapsed="0.000300"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:24.988273" elapsed="0.000359"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.988823" elapsed="0.000030"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:24.989064" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:24.989158" elapsed="0.000022"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-06-03T04:56:24.791133" elapsed="0.198172">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:25.998220" 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-06-03T04:56:25.997521" elapsed="0.000747"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:25.998995" 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-06-03T04:56:25.998538" elapsed="0.000496"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-03T04:56:25.999103" elapsed="0.000059"/>
</return>
<msg time="2026-06-03T04:56:25.999374" 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-06-03T04:56:25.996942" elapsed="0.002471"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-06-03T04:56:25.999637" elapsed="0.000249"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:26.000618" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-03T04:56:26.000112" elapsed="0.000544"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:26.001220" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:26.000879" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:26.001881" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:26.001487" elapsed="0.000431"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:26.004337" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:26.004041" elapsed="0.000339"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-03T04:56:26.004426" elapsed="0.000030"/>
</return>
<msg time="2026-06-03T04:56:26.004579" 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-06-03T04:56:26.003705" elapsed="0.000899"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<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-06-03T04:56:26.068941" level="INFO">${file_path_stream} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/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-06-03T04:56:26.068524" elapsed="0.000450"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-06-03T04:56:26.069767" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/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-06-03T04:56:26.069499" elapsed="0.000345">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/location.uri' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:26.069936" 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-06-03T04:56:26.069148" elapsed="0.000811"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:26.070606" level="INFO">${file_path} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:26.070191" elapsed="0.000442"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-06-03T04:56:26.070932" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-06-03T04:56:26.071091" 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-06-03T04:56:26.070789" elapsed="0.000326"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:26.071536" 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-06-03T04:56:26.071265" elapsed="0.000317"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:26.072562" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:26.072286" elapsed="0.000321"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-03T04:56:26.073031" 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-06-03T04:56:26.072760" elapsed="0.000300"/>
</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-06-03T04:56:26.073403" 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-06-03T04:56:26.073601" elapsed="0.000023"/>
</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-06-03T04:56:26.073768" elapsed="0.000020"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-06-03T04:56:26.073251" elapsed="0.000573"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-06-03T04:56:26.073114" elapsed="0.000739"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-06-03T04:56:26.073900" elapsed="0.000032"/>
</return>
<msg time="2026-06-03T04:56:26.074073" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-06-03T04:56:26.071973" elapsed="0.002125"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:26.071662" elapsed="0.002468"/>
</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-06-03T04:56:26.074294" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:26.074155" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:26.071637" elapsed="0.002750"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-06-03T04:56:26.074993" 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-06-03T04:56:26.074554" elapsed="0.000466"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-06-03T04:56:26.075070" 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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-06-03T04:56:26.067669" elapsed="0.007621"/>
</kw>
<msg time="2026-06-03T04:56:26.075377" 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-06-03T04:56:26.054428" elapsed="0.021078"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.096008" elapsed="0.000029"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.116631" 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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.137218" elapsed="0.000053"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.137700" elapsed="0.000026"/>
</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-06-03T04:56:26.137975" elapsed="0.000022"/>
</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-06-03T04:56:26.138834" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:26.138572" elapsed="0.000337"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:26.138516" elapsed="0.000432"/>
</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-06-03T04:56:26.139785" elapsed="0.000052"/>
</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-06-03T04:56:26.140670" elapsed="0.000051"/>
</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-06-03T04:56:26.141507" elapsed="0.000051"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-06-03T04:56:26.138463" elapsed="0.003142"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-06-03T04:56:26.138252" elapsed="0.003410"/>
</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-06-03T04:56:26.141865" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:26.142238" elapsed="0.000020"/>
</return>
<msg time="2026-06-03T04:56:26.142414" 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-06-03T04:56:26.034100" elapsed="0.108342"/>
</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-06-03T04:56:26.144894" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:26.144024" elapsed="0.000985">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:26.145128" 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-06-03T04:56:26.143268" elapsed="0.001955"/>
</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-06-03T04:56:26.145939" elapsed="0.000077"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:26.145472" elapsed="0.000616"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:26.147285" 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-06-03T04:56:26.146633" elapsed="0.000758"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:26.146151" elapsed="0.001316"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:26.145452" elapsed="0.002080"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:26.150459" 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-06-03T04:56:26.147687" elapsed="0.002868"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-06-03T04:56:26.150794" elapsed="0.000034"/>
</return>
<msg time="2026-06-03T04:56:26.150955" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:26.142837" elapsed="0.008142"/>
</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-06-03T04:56:26.153091" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:26.152424" elapsed="0.000768">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:26.153383" 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-06-03T04:56:26.151712" elapsed="0.001768"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-06-03T04:56:26.153993" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-06-03T04:56:26.153709" elapsed="0.000392"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:26.153689" elapsed="0.000474"/>
</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-06-03T04:56:26.154307" 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-06-03T04:56:26.154619" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:26.154844" elapsed="0.000017"/>
</return>
<msg time="2026-06-03T04:56:26.160538" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:26.151318" elapsed="0.009350"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:26.165392" 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-06-03T04:56:26.164789" elapsed="0.000703"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:26.166236" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:26.165760" elapsed="0.000561"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-06-03T04:56:26.180464" level="INFO">GET Request : url=http://10.30.171.245: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.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0didiybrngcpf1jw4jvi4mlolc0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-06-03T04:56:26.180631" level="INFO">GET Response : url=http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-06-03T04:56:26.180854" level="FAIL">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${response}</var>
<arg>${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-06-03T04:56:26.168874" elapsed="0.012741">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:26.166520" elapsed="0.015221">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:26.182069" elapsed="0.000078"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:26.181852" elapsed="0.000378"/>
</branch>
<status status="FAIL" start="2026-06-03T04:56:26.166490" elapsed="0.015803">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:26.182801" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:26.183073" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-06-03T04:56:26.183031" elapsed="0.000139"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:26.183012" 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-06-03T04:56:26.183392" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-06-03T04:56:26.183695" elapsed="0.000018"/>
</return>
<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="FAIL" start="2026-06-03T04:56:26.161869" elapsed="0.021946">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:26.183893" elapsed="0.000016"/>
</return>
<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="FAIL" start="2026-06-03T04:56:26.012784" elapsed="0.171210">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</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-06-03T04:56:26.184552" elapsed="0.000142"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:26.184133" elapsed="0.000675"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:26.184092" elapsed="0.000769"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:26.184933" elapsed="0.000033"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</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="FAIL" start="2026-06-03T04:56:26.008687" elapsed="0.176472">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:26.004678" elapsed="0.180637">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</branch>
<status status="FAIL" start="2026-06-03T04:56:26.004658" elapsed="0.180758">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.185948" elapsed="0.000055"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.186446" elapsed="0.000048"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.186819" elapsed="0.000044"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.187298" elapsed="0.000096"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.187863" elapsed="0.000052"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.188232" elapsed="0.000044"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.188624" elapsed="0.000045"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="NOT RUN" start="2026-06-03T04:56:26.188772" elapsed="0.000034"/>
</return>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:26.003100" elapsed="0.185900">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${raft_state}</value>
<status status="NOT RUN" start="2026-06-03T04:56:26.189155" elapsed="0.000033"/>
</return>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:26.002394" elapsed="0.186999">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.189905" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:26.189601" elapsed="0.000424"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.190495" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:26.190077" elapsed="0.000542"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.190971" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:26.190669" elapsed="0.000413"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:26.189561" elapsed="0.001570"/>
</if>
<var name="${index}">1</var>
<status status="FAIL" start="2026-06-03T04:56:26.002215" elapsed="0.189008">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-06-03T04:56:26.001996" elapsed="0.189398">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:26.191524" elapsed="0.000033"/>
</return>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="FAIL" start="2026-06-03T04:56:25.995874" elapsed="0.195921">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get Length" owner="BuiltIn">
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.192129" elapsed="0.000067"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.192426" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:26.192271" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:26.192253" elapsed="0.000248"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.192630" elapsed="0.000020"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:26.192794" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:26.192858" elapsed="0.000014"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-06-03T04:56:25.990569" elapsed="0.202391">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.205383" 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-06-03T04:56:27.204866" elapsed="0.000553"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.205901" 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-06-03T04:56:27.205589" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-03T04:56:27.205976" elapsed="0.000043"/>
</return>
<msg time="2026-06-03T04:56:27.206156" 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-06-03T04:56:27.204491" elapsed="0.001709"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-06-03T04:56:27.206374" elapsed="0.000179"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.207034" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-03T04:56:27.206707" elapsed="0.000352"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.207460" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:27.207209" elapsed="0.000276"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.207855" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:27.207625" elapsed="0.000255"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.210292" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:27.209939" elapsed="0.000386"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-03T04:56:27.210395" elapsed="0.000031"/>
</return>
<msg time="2026-06-03T04:56:27.210546" 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-06-03T04:56:27.209611" elapsed="0.000959"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<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-06-03T04:56:27.275049" level="INFO">${file_path_stream} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/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-06-03T04:56:27.274658" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-06-03T04:56:27.275834" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/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-06-03T04:56:27.275574" elapsed="0.000336">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/location.uri' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:27.276003" 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-06-03T04:56:27.275234" elapsed="0.000793"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.276581" level="INFO">${file_path} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:27.276183" elapsed="0.000424"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-06-03T04:56:27.276973" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-06-03T04:56:27.277127" 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-06-03T04:56:27.276828" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.277560" 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-06-03T04:56:27.277300" elapsed="0.000304"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.278527" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:27.278256" elapsed="0.000314"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.279008" 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-06-03T04:56:27.278721" elapsed="0.000313"/>
</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-06-03T04:56:27.279337" elapsed="0.000038"/>
</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-06-03T04:56:27.279550" 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-06-03T04:56:27.279714" elapsed="0.000020"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-06-03T04:56:27.279213" elapsed="0.000557"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-06-03T04:56:27.279081" elapsed="0.000720"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-06-03T04:56:27.279846" elapsed="0.000027"/>
</return>
<msg time="2026-06-03T04:56:27.280000" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-06-03T04:56:27.277948" elapsed="0.002076"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:27.277671" elapsed="0.002385"/>
</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-06-03T04:56:27.280218" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:27.280081" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:27.277652" elapsed="0.002641"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.280874" 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-06-03T04:56:27.280442" elapsed="0.000459"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-06-03T04:56:27.280948" elapsed="0.000028"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-06-03T04:56:27.273875" elapsed="0.007295"/>
</kw>
<msg time="2026-06-03T04:56:27.281238" 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-06-03T04:56:27.260670" elapsed="0.020710"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.302093" elapsed="0.000029"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.322634" 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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.343204" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.343782" 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-06-03T04:56:27.344048" elapsed="0.000022"/>
</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-06-03T04:56:27.344842" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:27.344591" elapsed="0.000327"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:27.344539" elapsed="0.000414"/>
</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-06-03T04:56:27.345767" elapsed="0.000052"/>
</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-06-03T04:56:27.346611" elapsed="0.000051"/>
</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-06-03T04:56:27.347495" elapsed="0.000053"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-06-03T04:56:27.344496" elapsed="0.003100"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-06-03T04:56:27.344315" elapsed="0.003337"/>
</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-06-03T04:56:27.347851" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:27.348213" elapsed="0.000018"/>
</return>
<msg time="2026-06-03T04:56:27.348333" 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-06-03T04:56:27.240135" elapsed="0.108240"/>
</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-06-03T04:56:27.350477" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:27.349795" elapsed="0.000784">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:27.350699" 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-06-03T04:56:27.349105" elapsed="0.001690"/>
</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-06-03T04:56:27.351618" elapsed="0.000079"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:27.351023" elapsed="0.000749"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.352932" 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-06-03T04:56:27.352289" elapsed="0.000733"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:27.351834" elapsed="0.001262"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:27.351003" elapsed="0.002152"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.355944" 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-06-03T04:56:27.353304" elapsed="0.002738"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-06-03T04:56:27.356280" elapsed="0.000030"/>
</return>
<msg time="2026-06-03T04:56:27.356459" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:27.348737" elapsed="0.007746"/>
</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-06-03T04:56:27.358551" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:27.357867" elapsed="0.000784">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:27.358772" 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-06-03T04:56:27.357177" elapsed="0.001689"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-06-03T04:56:27.359462" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-06-03T04:56:27.359096" elapsed="0.000476"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:27.359076" elapsed="0.000592"/>
</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-06-03T04:56:27.359849" elapsed="0.000023"/>
</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-06-03T04:56:27.360145" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:27.360387" elapsed="0.000018"/>
</return>
<msg time="2026-06-03T04:56:27.362429" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:27.356808" elapsed="0.005648"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.364645" 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-06-03T04:56:27.364166" elapsed="0.000564"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:27.365436" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:27.364968" elapsed="0.000551"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-06-03T04:56:27.381620" level="INFO">GET Request : url=http://10.30.171.245: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.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0didiybrngcpf1jw4jvi4mlolc0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-06-03T04:56:27.381784" level="INFO">GET Response : url=http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-06-03T04:56:27.382004" level="FAIL">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${response}</var>
<arg>${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-06-03T04:56:27.367996" elapsed="0.014742">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:27.365677" elapsed="0.017186">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:27.383182" elapsed="0.000079"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:27.382968" elapsed="0.000379"/>
</branch>
<status status="FAIL" start="2026-06-03T04:56:27.365657" elapsed="0.017769">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:27.383938" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:27.384204" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-06-03T04:56:27.384167" elapsed="0.000129"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:27.384147" 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-06-03T04:56:27.384523" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-06-03T04:56:27.384786" elapsed="0.000017"/>
</return>
<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="FAIL" start="2026-06-03T04:56:27.362825" elapsed="0.022077">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:27.384979" elapsed="0.000015"/>
</return>
<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="FAIL" start="2026-06-03T04:56:27.218648" elapsed="0.166431">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</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-06-03T04:56:27.385350" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:27.385174" elapsed="0.000264"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:27.385157" elapsed="0.000304"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:27.385494" elapsed="0.000015"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</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="FAIL" start="2026-06-03T04:56:27.214595" elapsed="0.171000">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:27.210646" elapsed="0.175053">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</branch>
<status status="FAIL" start="2026-06-03T04:56:27.210625" elapsed="0.175105">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.385962" elapsed="0.000025"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.386151" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.386324" elapsed="0.000025"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.386566" elapsed="0.000024"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.386793" elapsed="0.000023"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.386964" elapsed="0.000021"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.387128" elapsed="0.000020"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="NOT RUN" start="2026-06-03T04:56:27.387195" elapsed="0.000015"/>
</return>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:27.209012" elapsed="0.178286">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${raft_state}</value>
<status status="NOT RUN" start="2026-06-03T04:56:27.387399" elapsed="0.000016"/>
</return>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:27.208305" elapsed="0.179193">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.387725" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:27.387587" elapsed="0.000192"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.387955" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:27.387803" elapsed="0.000211"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.388172" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:27.388037" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:27.387570" elapsed="0.000675"/>
</if>
<var name="${index}">1</var>
<status status="FAIL" start="2026-06-03T04:56:27.208144" elapsed="0.180143">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-06-03T04:56:27.207936" elapsed="0.180409">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:27.388416" elapsed="0.000015"/>
</return>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="FAIL" start="2026-06-03T04:56:27.203767" elapsed="0.184748">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get Length" owner="BuiltIn">
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.388688" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.388907" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:27.388775" elapsed="0.000183"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:27.388758" elapsed="0.000223"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.389107" elapsed="0.000020"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:27.389304" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:27.389389" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-06-03T04:56:27.194199" elapsed="0.195292">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.399334" 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-06-03T04:56:28.398511" elapsed="0.000904"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.400153" 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-06-03T04:56:28.399676" elapsed="0.000516"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-03T04:56:28.400266" elapsed="0.000075"/>
</return>
<msg time="2026-06-03T04:56:28.400572" 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-06-03T04:56:28.397906" elapsed="0.002701"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-06-03T04:56:28.400843" elapsed="0.000334"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.401927" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-03T04:56:28.401425" elapsed="0.000528"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.402386" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:28.402110" elapsed="0.000304"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.402799" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:28.402559" elapsed="0.000266"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.405437" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:28.405093" elapsed="0.000372"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-03T04:56:28.405511" elapsed="0.000029"/>
</return>
<msg time="2026-06-03T04:56:28.405661" 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-06-03T04:56:28.404719" elapsed="0.000966"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<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-06-03T04:56:28.472613" level="INFO">${file_path_stream} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/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-06-03T04:56:28.472192" elapsed="0.000451"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-06-03T04:56:28.473509" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/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-06-03T04:56:28.473156" elapsed="0.000502">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/location.uri' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:28.473757" 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-06-03T04:56:28.472811" elapsed="0.000972"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.474337" level="INFO">${file_path} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:28.473944" elapsed="0.000439"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-06-03T04:56:28.474721" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-06-03T04:56:28.474956" 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-06-03T04:56:28.474561" elapsed="0.000424"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.475415" 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-06-03T04:56:28.475145" elapsed="0.000325"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.476756" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:28.476282" elapsed="0.000519"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.477264" 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-06-03T04:56:28.476968" elapsed="0.000323"/>
</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-06-03T04:56:28.477665" elapsed="0.000024"/>
</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-06-03T04:56:28.477874" 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-06-03T04:56:28.478043" elapsed="0.000022"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-06-03T04:56:28.477505" elapsed="0.000603"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-06-03T04:56:28.477341" elapsed="0.000806"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-06-03T04:56:28.478197" elapsed="0.000029"/>
</return>
<msg time="2026-06-03T04:56:28.478378" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-06-03T04:56:28.475949" elapsed="0.002456"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:28.475635" elapsed="0.002804"/>
</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-06-03T04:56:28.478608" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:28.478467" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:28.475614" elapsed="0.003072"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.479322" 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-06-03T04:56:28.478840" elapsed="0.000528"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-06-03T04:56:28.479420" 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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-06-03T04:56:28.471339" elapsed="0.008308"/>
</kw>
<msg time="2026-06-03T04:56:28.479719" 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-06-03T04:56:28.457608" elapsed="0.022248"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.501501" 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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.523417" elapsed="0.000030"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.545702" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.546238" elapsed="0.000033"/>
</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-06-03T04:56:28.546546" elapsed="0.000024"/>
</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-06-03T04:56:28.547448" elapsed="0.000075"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:28.547134" elapsed="0.000437"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:28.547083" elapsed="0.000525"/>
</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-06-03T04:56:28.548493" elapsed="0.000055"/>
</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-06-03T04:56:28.549456" elapsed="0.000056"/>
</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-06-03T04:56:28.550407" elapsed="0.000091"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-06-03T04:56:28.547039" elapsed="0.003512"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-06-03T04:56:28.546858" elapsed="0.003751"/>
</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-06-03T04:56:28.550819" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:28.551241" elapsed="0.000021"/>
</return>
<msg time="2026-06-03T04:56:28.551389" 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-06-03T04:56:28.436510" elapsed="0.114906"/>
</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-06-03T04:56:28.553904" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:28.553062" elapsed="0.000994">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:28.554190" 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-06-03T04:56:28.552254" elapsed="0.002069"/>
</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-06-03T04:56:28.555219" elapsed="0.000156"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:28.554595" elapsed="0.000879"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.557066" 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-06-03T04:56:28.556216" elapsed="0.000958"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:28.555550" elapsed="0.001757"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:28.554567" elapsed="0.002889"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.561339" 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-06-03T04:56:28.557652" elapsed="0.003911"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-06-03T04:56:28.561934" elapsed="0.000047"/>
</return>
<msg time="2026-06-03T04:56:28.562161" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:28.551852" elapsed="0.010346"/>
</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-06-03T04:56:28.565492" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:28.564383" elapsed="0.001260">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:28.565813" 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-06-03T04:56:28.563340" elapsed="0.002652"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-06-03T04:56:28.566807" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-06-03T04:56:28.566341" elapsed="0.000623"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:28.566277" elapsed="0.000781"/>
</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-06-03T04:56:28.567267" elapsed="0.000075"/>
</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-06-03T04:56:28.567744" elapsed="0.000031"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:28.568099" elapsed="0.000027"/>
</return>
<msg time="2026-06-03T04:56:28.571269" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:28.562764" elapsed="0.008675"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.574716" 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-06-03T04:56:28.574013" elapsed="0.000793"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:28.575569" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:28.575051" elapsed="0.000639"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-06-03T04:56:28.591499" level="INFO">GET Request : url=http://10.30.171.245: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.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0didiybrngcpf1jw4jvi4mlolc0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-06-03T04:56:28.591869" level="INFO">GET Response : url=http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-06-03T04:56:28.592406" level="FAIL">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${response}</var>
<arg>${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-06-03T04:56:28.578447" elapsed="0.015687">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:28.575854" elapsed="0.018611">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:28.595174" elapsed="0.000116"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:28.594802" elapsed="0.000631"/>
</branch>
<status status="FAIL" start="2026-06-03T04:56:28.575832" elapsed="0.019691">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:28.596236" elapsed="0.000041"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:28.596655" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-06-03T04:56:28.596599" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:28.596569" elapsed="0.000321"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.597102" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-06-03T04:56:28.597526" elapsed="0.000026"/>
</return>
<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="FAIL" start="2026-06-03T04:56:28.572041" elapsed="0.025657">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:28.597806" elapsed="0.000023"/>
</return>
<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="FAIL" start="2026-06-03T04:56:28.414310" elapsed="0.183637">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</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-06-03T04:56:28.598371" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:28.598094" elapsed="0.000384"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:28.598064" elapsed="0.000447"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:28.598558" elapsed="0.000041"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</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="FAIL" start="2026-06-03T04:56:28.410032" elapsed="0.188714">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:28.405772" elapsed="0.193076">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</branch>
<status status="FAIL" start="2026-06-03T04:56:28.405746" elapsed="0.193198">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.599307" elapsed="0.000036"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.599619" elapsed="0.000030"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.599871" elapsed="0.000032"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.600192" elapsed="0.000034"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.600555" elapsed="0.000035"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.600798" elapsed="0.000033"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.601041" elapsed="0.000028"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="NOT RUN" start="2026-06-03T04:56:28.601134" elapsed="0.000029"/>
</return>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:28.404086" elapsed="0.197218">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${raft_state}</value>
<status status="NOT RUN" start="2026-06-03T04:56:28.601462" elapsed="0.000024"/>
</return>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:28.403324" elapsed="0.198280">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.601942" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:28.601734" elapsed="0.000287"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.602243" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:28.602054" elapsed="0.000263"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.602589" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:28.602387" elapsed="0.000319"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:28.601708" elapsed="0.001029"/>
</if>
<var name="${index}">1</var>
<status status="FAIL" start="2026-06-03T04:56:28.403148" elapsed="0.199649">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-06-03T04:56:28.402898" elapsed="0.199986">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:28.602954" elapsed="0.000021"/>
</return>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="FAIL" start="2026-06-03T04:56:28.396808" elapsed="0.206264">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get Length" owner="BuiltIn">
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.603257" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.603511" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:28.603351" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:28.603329" elapsed="0.000260"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.603721" elapsed="0.000020"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:28.603893" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:28.603958" elapsed="0.000014"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-06-03T04:56:28.390934" elapsed="0.213138">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.613686" 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-06-03T04:56:29.613048" elapsed="0.000682"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.614426" 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-06-03T04:56:29.613956" elapsed="0.000509"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-03T04:56:29.614533" elapsed="0.000051"/>
</return>
<msg time="2026-06-03T04:56:29.614776" 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-06-03T04:56:29.612524" elapsed="0.002289"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-06-03T04:56:29.615037" elapsed="0.000245"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.616032" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-03T04:56:29.615535" elapsed="0.000537"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.616679" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:29.616301" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.617277" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:29.616930" elapsed="0.000385"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.620184" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:29.619881" elapsed="0.000331"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-03T04:56:29.620258" elapsed="0.000028"/>
</return>
<msg time="2026-06-03T04:56:29.620422" 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-06-03T04:56:29.619544" elapsed="0.000904"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<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-06-03T04:56:29.685495" level="INFO">${file_path_stream} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/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-06-03T04:56:29.685088" elapsed="0.000437"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-06-03T04:56:29.686436" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/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-06-03T04:56:29.686160" elapsed="0.000356">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/location.uri' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:29.686610" 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-06-03T04:56:29.685686" elapsed="0.000948"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.687207" level="INFO">${file_path} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:29.686797" elapsed="0.000437"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-06-03T04:56:29.687551" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-06-03T04:56:29.687714" 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-06-03T04:56:29.687407" elapsed="0.000333"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.688145" 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-06-03T04:56:29.687896" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.689161" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:29.688908" elapsed="0.000298"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.689651" 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-06-03T04:56:29.689381" elapsed="0.000296"/>
</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-06-03T04:56:29.690062" elapsed="0.000021"/>
</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-06-03T04:56:29.690260" 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-06-03T04:56:29.690452" elapsed="0.000023"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-06-03T04:56:29.689933" elapsed="0.000579"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-06-03T04:56:29.689789" elapsed="0.000754"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-06-03T04:56:29.690590" elapsed="0.000032"/>
</return>
<msg time="2026-06-03T04:56:29.690756" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-06-03T04:56:29.688587" elapsed="0.002194"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:29.688262" elapsed="0.002552"/>
</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-06-03T04:56:29.691009" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:29.690839" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:29.688242" elapsed="0.002846"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.691709" 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-06-03T04:56:29.691227" elapsed="0.000509"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-06-03T04:56:29.691784" 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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-06-03T04:56:29.684279" elapsed="0.007730"/>
</kw>
<msg time="2026-06-03T04:56:29.692078" 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-06-03T04:56:29.670918" elapsed="0.021289"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.713085" 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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.733884" elapsed="0.000036"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.754363" 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-06-03T04:56:29.754772" 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-06-03T04:56:29.755045" 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-06-03T04:56:29.756008" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:29.755748" elapsed="0.000336"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:29.755693" elapsed="0.000429"/>
</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-06-03T04:56:29.756938" elapsed="0.000051"/>
</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-06-03T04:56:29.757778" elapsed="0.000051"/>
</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-06-03T04:56:29.758687" elapsed="0.000051"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-06-03T04:56:29.755641" elapsed="0.003145"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-06-03T04:56:29.755316" elapsed="0.003528"/>
</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-06-03T04:56:29.759046" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:29.759561" elapsed="0.000022"/>
</return>
<msg time="2026-06-03T04:56:29.759720" 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-06-03T04:56:29.650327" elapsed="0.109422"/>
</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-06-03T04:56:29.762037" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:29.761289" elapsed="0.000862">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:29.762272" 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-06-03T04:56:29.760548" elapsed="0.001838"/>
</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-06-03T04:56:29.763098" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:29.762620" elapsed="0.000630"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.764526" 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-06-03T04:56:29.763875" elapsed="0.000742"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:29.763313" elapsed="0.001379"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:29.762599" elapsed="0.002152"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.767645" 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-06-03T04:56:29.764903" elapsed="0.002840"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-06-03T04:56:29.767986" elapsed="0.000038"/>
</return>
<msg time="2026-06-03T04:56:29.768155" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:29.760127" elapsed="0.008053"/>
</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-06-03T04:56:29.770365" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:29.769662" elapsed="0.000813">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:29.770599" 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-06-03T04:56:29.768961" elapsed="0.001734"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-06-03T04:56:29.771220" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-06-03T04:56:29.770929" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:29.770906" elapsed="0.000599"/>
</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-06-03T04:56:29.771666" 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-06-03T04:56:29.771965" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:29.772190" elapsed="0.000017"/>
</return>
<msg time="2026-06-03T04:56:29.774290" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:29.768540" elapsed="0.005775"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.776600" 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-06-03T04:56:29.776098" elapsed="0.000590"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:29.777463" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:29.776985" elapsed="0.000563"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-06-03T04:56:29.794795" level="INFO">GET Request : url=http://10.30.171.245: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.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0didiybrngcpf1jw4jvi4mlolc0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-06-03T04:56:29.794975" level="INFO">GET Response : url=http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-06-03T04:56:29.795210" level="FAIL">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${response}</var>
<arg>${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-06-03T04:56:29.780063" elapsed="0.015945">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:29.777709" elapsed="0.018431">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:29.796516" elapsed="0.000079"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:29.796251" elapsed="0.000427"/>
</branch>
<status status="FAIL" start="2026-06-03T04:56:29.777688" elapsed="0.019052">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:29.797250" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:29.797545" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-06-03T04:56:29.797502" elapsed="0.000137"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:29.797480" 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-06-03T04:56:29.797845" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-06-03T04:56:29.798109" elapsed="0.000017"/>
</return>
<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="FAIL" start="2026-06-03T04:56:29.774715" elapsed="0.023514">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:29.798306" elapsed="0.000016"/>
</return>
<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="FAIL" start="2026-06-03T04:56:29.628681" elapsed="0.169742">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</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-06-03T04:56:29.798695" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:29.798519" elapsed="0.000252"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:29.798502" elapsed="0.000293"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:29.798827" elapsed="0.000014"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</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="FAIL" start="2026-06-03T04:56:29.624532" elapsed="0.174397">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:29.620525" elapsed="0.178474">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</branch>
<status status="FAIL" start="2026-06-03T04:56:29.620501" elapsed="0.178527">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.799262" elapsed="0.000024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.799481" elapsed="0.000022"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.799697" elapsed="0.000022"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.799941" elapsed="0.000024"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.800164" elapsed="0.000023"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.800329" elapsed="0.000046"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.800521" elapsed="0.000020"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="NOT RUN" start="2026-06-03T04:56:29.800586" elapsed="0.000015"/>
</return>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:29.618930" elapsed="0.181765">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${raft_state}</value>
<status status="NOT RUN" start="2026-06-03T04:56:29.800782" elapsed="0.000019"/>
</return>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:29.617956" elapsed="0.182937">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.801120" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:29.800983" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.801328" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:29.801196" elapsed="0.000203"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.801559" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:29.801422" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:29.800965" elapsed="0.000666"/>
</if>
<var name="${index}">1</var>
<status status="FAIL" start="2026-06-03T04:56:29.617720" elapsed="0.183952">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-06-03T04:56:29.617413" elapsed="0.184320">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:29.801791" elapsed="0.000015"/>
</return>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="FAIL" start="2026-06-03T04:56:29.611503" elapsed="0.190390">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get Length" owner="BuiltIn">
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.802069" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.802285" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:29.802153" elapsed="0.000182"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:29.802137" elapsed="0.000236"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.802503" elapsed="0.000020"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:29.802664" elapsed="0.000019"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:29.802727" elapsed="0.000014"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-06-03T04:56:29.605273" elapsed="0.197554">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:30.810679" 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-06-03T04:56:30.810054" elapsed="0.000658"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:30.811280" 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-06-03T04:56:30.810949" elapsed="0.000359"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-06-03T04:56:30.811374" elapsed="0.000044"/>
</return>
<msg time="2026-06-03T04:56:30.811553" 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-06-03T04:56:30.809646" elapsed="0.001932"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-06-03T04:56:30.811726" elapsed="0.000176"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:30.812409" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-06-03T04:56:30.812055" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:30.812834" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:30.812591" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-06-03T04:56:30.813248" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-06-03T04:56:30.813008" elapsed="0.000266"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:30.816073" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-06-03T04:56:30.815626" elapsed="0.000495"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-06-03T04:56:30.816186" elapsed="0.000041"/>
</return>
<msg time="2026-06-03T04:56:30.816420" 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-06-03T04:56:30.815129" elapsed="0.001326"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<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-06-03T04:56:30.926702" level="INFO">${file_path_stream} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/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-06-03T04:56:30.926264" elapsed="0.000472"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-06-03T04:56:30.927608" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/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-06-03T04:56:30.927236" elapsed="0.000457">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules.titanium/location.uri' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:30.927791" 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-06-03T04:56:30.926906" elapsed="0.000909"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:30.928380" level="INFO">${file_path} = /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:30.927979" elapsed="0.000429"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-06-03T04:56:30.928714" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-06-03T04:56:30.928875" 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-06-03T04:56:30.928565" elapsed="0.000335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:30.929289" 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-06-03T04:56:30.929048" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:30.930315" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:30.930064" elapsed="0.000311"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-06-03T04:56:30.930796" 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-06-03T04:56:30.930531" elapsed="0.000291"/>
</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-06-03T04:56:30.931144" 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-06-03T04:56:30.931380" 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-06-03T04:56:30.931552" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-06-03T04:56:30.931017" elapsed="0.000651"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-06-03T04:56:30.930876" elapsed="0.000824"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-06-03T04:56:30.931748" elapsed="0.000035"/>
</return>
<msg time="2026-06-03T04:56:30.931916" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-06-03T04:56:30.929748" elapsed="0.002194"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:30.929434" elapsed="0.002541"/>
</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-06-03T04:56:30.932141" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:30.931999" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:30.929409" elapsed="0.002810"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-06-03T04:56:30.932978" 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-06-03T04:56:30.932372" elapsed="0.000634"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-06-03T04:56:30.933055" 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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-06-03T04:56:30.925444" elapsed="0.007839"/>
</kw>
<msg time="2026-06-03T04:56:30.933374" 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-06-03T04:56:30.911520" elapsed="0.021985"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:30.954141" elapsed="0.000035"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:30.975022" elapsed="0.000047"/>
</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/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name} exists. If yes read and Log contents of file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules.titanium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.003165" elapsed="0.000070"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.003823" elapsed="0.000027"/>
</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-06-03T04:56:31.004227" elapsed="0.000022"/>
</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-06-03T04:56:31.005113" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:31.004845" elapsed="0.000344"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:31.004787" elapsed="0.000443"/>
</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-06-03T04:56:31.006051" elapsed="0.000051"/>
</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-06-03T04:56:31.006894" elapsed="0.000051"/>
</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-06-03T04:56:31.007829" elapsed="0.000056"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-06-03T04:56:31.004728" elapsed="0.003205"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-06-03T04:56:31.004535" elapsed="0.003458"/>
</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-06-03T04:56:31.008275" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:31.008665" elapsed="0.000024"/>
</return>
<msg time="2026-06-03T04:56:31.008851" 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-06-03T04:56:30.883840" elapsed="0.125042"/>
</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-06-03T04:56:31.011249" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:31.010514" elapsed="0.000933">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:31.011575" 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-06-03T04:56:31.009735" elapsed="0.001935"/>
</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-06-03T04:56:31.012426" elapsed="0.000077"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:31.011935" elapsed="0.000643"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-06-03T04:56:31.013785" 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-06-03T04:56:31.013104" elapsed="0.000772"/>
</kw>
<status status="PASS" start="2026-06-03T04:56:31.012639" elapsed="0.001311"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:31.011914" elapsed="0.002095"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-06-03T04:56:31.016816" 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-06-03T04:56:31.014160" elapsed="0.002754"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-06-03T04:56:31.017151" elapsed="0.000034"/>
</return>
<msg time="2026-06-03T04:56:31.017313" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:31.009298" elapsed="0.008039"/>
</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-06-03T04:56:31.019533" level="FAIL">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:31.018763" elapsed="0.000875">File '/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-06-03T04:56:31.019761" 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-06-03T04:56:31.018065" elapsed="0.001791"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-06-03T04:56:31.020425" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-06-03T04:56:31.020122" elapsed="0.000416"/>
</branch>
<status status="PASS" start="2026-06-03T04:56:31.020101" elapsed="0.000500"/>
</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-06-03T04:56:31.020748" 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-06-03T04:56:31.021057" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:31.021282" elapsed="0.000017"/>
</return>
<msg time="2026-06-03T04:56:31.023497" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/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-06-03T04:56:31.017685" elapsed="0.005840"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:31.025708" 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-06-03T04:56:31.025212" elapsed="0.000583"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-06-03T04:56:31.026514" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-06-03T04:56:31.026039" elapsed="0.000559"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-06-03T04:56:31.040556" level="INFO">GET Request : url=http://10.30.171.245: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.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node0didiybrngcpf1jw4jvi4mlolc0.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-06-03T04:56:31.040831" level="INFO">GET Response : url=http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-06-03T04:56:31.041143" level="FAIL">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${response}</var>
<arg>${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-06-03T04:56:31.029075" elapsed="0.013082">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:31.026757" elapsed="0.015575">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:31.042803" elapsed="0.000107"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:31.042504" elapsed="0.000521"/>
</branch>
<status status="FAIL" start="2026-06-03T04:56:31.026737" elapsed="0.016374">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</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-06-03T04:56:31.043799" elapsed="0.000038"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:31.044207" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-06-03T04:56:31.044155" elapsed="0.000184"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:31.044126" elapsed="0.000316"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.044641" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-06-03T04:56:31.045038" elapsed="0.000026"/>
</return>
<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="FAIL" start="2026-06-03T04:56:31.023930" elapsed="0.021280">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:31.045319" elapsed="0.000022"/>
</return>
<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="FAIL" start="2026-06-03T04:56:30.854524" elapsed="0.190964">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</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-06-03T04:56:31.045865" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:31.045622" elapsed="0.000341"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:31.045598" elapsed="0.000398"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-06-03T04:56:31.046040" elapsed="0.000021"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</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="FAIL" start="2026-06-03T04:56:30.849720" elapsed="0.196463">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-06-03T04:56:30.816560" elapsed="0.229719">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</branch>
<status status="FAIL" start="2026-06-03T04:56:30.816531" elapsed="0.229790">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.046683" elapsed="0.000034"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.046954" elapsed="0.000029"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.047180" elapsed="0.000028"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.047504" elapsed="0.000033"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.047816" elapsed="0.000032"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.048130" elapsed="0.000030"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.048378" elapsed="0.000030"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="NOT RUN" start="2026-06-03T04:56:31.048471" elapsed="0.000021"/>
</return>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:30.814431" elapsed="0.234187">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<return>
<value>${raft_state}</value>
<status status="NOT RUN" start="2026-06-03T04:56:31.048716" elapsed="0.000021"/>
</return>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-06-03T04:56:30.813721" elapsed="0.235128">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.049166" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:31.048975" elapsed="0.000267"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.049484" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:31.049274" elapsed="0.000287"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.049782" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:31.049592" elapsed="0.000260"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:31.048950" elapsed="0.000937"/>
</if>
<var name="${index}">1</var>
<status status="FAIL" start="2026-06-03T04:56:30.813556" elapsed="0.236389">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-06-03T04:56:30.813327" elapsed="0.236701">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:31.050104" elapsed="0.000021"/>
</return>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="FAIL" start="2026-06-03T04:56:30.808862" elapsed="0.241380">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get Length" owner="BuiltIn">
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.050547" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.050854" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-06-03T04:56:31.050669" elapsed="0.000254"/>
</branch>
<status status="NOT RUN" start="2026-06-03T04:56:31.050646" elapsed="0.000308"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.051130" elapsed="0.000028"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.051379" elapsed="0.000030"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:31.051471" elapsed="0.000021"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-06-03T04:56:30.803662" elapsed="0.247948">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<msg time="2026-06-03T04:56:31.051749" level="FAIL">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${inv_conf_leader}</var>
<var>${inv_conf_followers_list}</var>
<arg>10s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Get_Leader_And_Followers_For_Shard</arg>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-06-03T04:56:19.996794" elapsed="11.055087">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>config inventory Leader is ${inv_conf_leader} and followers are ${inv_conf_followers_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.052185" elapsed="0.000031"/>
</kw>
<return>
<value>${inv_conf_leader}</value>
<value>${inv_conf_followers_list}</value>
<status status="NOT RUN" start="2026-06-03T04:56:31.052274" elapsed="0.000020"/>
</return>
<var>${inventory_leader}</var>
<var>${inventory_followers}</var>
<doc>Check Status for Inventory Config shard in OpenFlow application.</doc>
<status status="FAIL" start="2026-06-03T04:56:19.994627" elapsed="11.057854">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${Follower_Node_1}</var>
<arg>${Inventory_Followers}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.052743" elapsed="0.000030"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${Follower_Node_2}</var>
<arg>${Inventory_Followers}</arg>
<arg>1</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.053008" elapsed="0.000024"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>${\n}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.053174" elapsed="0.000020"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The follower Node1 is ${Follower_Node_1}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.053327" elapsed="0.000022"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The follower Node2 is ${Follower_Node_2}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.053497" elapsed="0.000020"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The leader Node is ${Inventory_Leader}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.053649" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Follower_Node_1}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.053816" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Follower_Node_2}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.053977" elapsed="0.000019"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Leader}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.054137" elapsed="0.000019"/>
</kw>
<doc>Find a leader and followers in the inventory config shard</doc>
<status status="FAIL" start="2026-06-03T04:56:19.993987" elapsed="11.060326">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: HTTPError: 409 Client Error: Conflict for url: http://10.30.171.245:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig</status>
</test>
<test id="s1-t3" name="Start Mininet Connect To Follower Node1" line="66">
<kw name="Start Mininet Single Controller" owner="MininetKeywords">
<msg time="2026-06-03T04:56:31.059602" level="FAIL">Variable '${Follower_Node_1}' not found.</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${ODL_SYSTEM_${Follower_Node_1}_IP}</arg>
<arg>--topo linear,${switch_count}</arg>
<doc>Start Mininet with custom topology and connect to controller.</doc>
<status status="FAIL" start="2026-06-03T04:56:31.055391" elapsed="0.004251">Variable '${Follower_Node_1}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${mininet_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.059817" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>${mininet_timeout}</arg>
<arg>2s</arg>
<arg>ClusterOpenFlow.Verify_Switch_Connections_Running_On_Member</arg>
<arg>${switch_count}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.059982" elapsed="0.000020"/>
</kw>
<doc>Start mininet with connection to follower node1.</doc>
<status status="FAIL" start="2026-06-03T04:56:31.054723" elapsed="0.005439">Variable '${Follower_Node_1}' not found.</status>
</test>
<test id="s1-t4" name="Add Bulk Flow From Follower Node2" line="80">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-06-03T04:56:31.061298" level="INFO">${config_datastore_write_start_time} = 2026-06-03 04:56:31.061</msg>
<var>${config_datastore_write_start_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-06-03T04:56:31.061025" elapsed="0.000300"/>
</kw>
<kw name="Add Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-06-03T04:56:31.069819" level="FAIL">Variable '${temp_json_config_add}' not found.</msg>
<arg>${temp_json_config_add}</arg>
<arg>${Follower_Node_2}</arg>
<arg>${operation_timeout}</arg>
<doc>Add Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-06-03T04:56:31.065673" elapsed="0.004183">Variable '${temp_json_config_add}' not found.</status>
</kw>
<kw name="Get Current Date" owner="DateTime">
<var>${config_datastore_write_end_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.070021" elapsed="0.000021"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<var>${config_datastore_write_time}</var>
<arg>${config_datastore_write_end_time}</arg>
<arg>${config_datastore_write_start_time}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.070182" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${config_datastore_write_rate}</var>
<arg>${flow_count_after_add} / ${config_datastore_write_time}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.070345" elapsed="0.000035"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${config_datastore_write_start_time}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.070527" elapsed="0.000020"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>${\n}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.070680" elapsed="0.000020"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The config_datastore_write_time is ${config_datastore_write_time}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.070831" elapsed="0.000020"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The config_datastore_write_rate is ${config_datastore_write_rate}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.070983" elapsed="0.000019"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${config_datastore_write_time}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.071143" elapsed="0.000019"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${config_datastore_write_rate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.071302" elapsed="0.000019"/>
</kw>
<doc>100K Flows (1K Flows per DPN) in 100 DPN added via Follower Node2 and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-06-03T04:56:31.060443" elapsed="0.011020">Variable '${temp_json_config_add}' not found.</status>
</test>
<test id="s1-t5" name="Verify Flows In Switch" line="96">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-06-03T04:56:31.072530" level="INFO">${Mininet_write_start_time} = 2026-06-03 04:56:31.072</msg>
<var>${Mininet_write_start_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-06-03T04:56:31.072282" elapsed="0.000275"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-06-03T04:56:31.076754" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-06-03T04:56:31.072752" elapsed="0.004040">Variable '${mininet_conn_id}' not found.</status>
</kw>
<kw name="Get Current Date" owner="DateTime">
<var>${Mininet_write_end_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.076955" elapsed="0.000021"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<var>${Mininet_write_time}</var>
<arg>${Mininet_write_end_time}</arg>
<arg>${config_datastore_write_start_time}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.077116" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${Mininet_write_rate}</var>
<arg>${flow_count_after_add} / ${Mininet_write_time}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.077279" elapsed="0.000019"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>${\n}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.077452" elapsed="0.000020"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The Mininet_write_time is ${Mininet_write_time}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.077606" elapsed="0.000019"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The Mininet_write_rate is ${Mininet_write_rate}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.077756" elapsed="0.000019"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Mininet_write_time}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.077925" elapsed="0.000019"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Mininet_write_rate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T04:56:31.078086" elapsed="0.000020"/>
</kw>
<doc>Verify 100K flows are installed in 10 switches.</doc>
<status status="FAIL" start="2026-06-03T04:56:31.071822" elapsed="0.006405">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-t6" name="Verify Flows In Oper DS" line="114">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:31.087593" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:31.083324" elapsed="0.004307">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:33.103419" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:33.097775" elapsed="0.005697">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:35.117084" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:35.111309" elapsed="0.005829">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:37.131158" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:37.127020" elapsed="0.004187">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:39.145522" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:39.139540" elapsed="0.006033">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:41.160714" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:41.155244" elapsed="0.005536">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:43.175542" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:43.169735" elapsed="0.005876">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:45.189453" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:45.185171" elapsed="0.004334">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:47.203795" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:47.197900" elapsed="0.005949">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:49.217972" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:49.213576" elapsed="0.004450">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:51.232763" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:51.226918" elapsed="0.005920">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:53.246705" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:53.242543" elapsed="0.004213">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:55.260626" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:55.254728" elapsed="0.005963">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:57.277379" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:57.270575" elapsed="0.006872">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:56:59.294918" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:56:59.289139" elapsed="0.005900">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:01.304375" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:01.300164" elapsed="0.004274">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:03.318418" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:03.312632" elapsed="0.005843">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:05.332284" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:05.325062" elapsed="0.007276">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:07.347252" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:07.341284" elapsed="0.006037">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:09.358503" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:09.353289" elapsed="0.005272">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:11.373163" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:11.369028" elapsed="0.004184">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:13.387126" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:13.381331" elapsed="0.005849">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:15.401609" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:15.397471" elapsed="0.004190">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:17.416001" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:17.410234" elapsed="0.005829">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:19.431299" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:19.425612" elapsed="0.005750">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:21.445884" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:21.439987" elapsed="0.005961">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:23.460865" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:23.454452" elapsed="0.006467">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:25.476512" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:25.470242" elapsed="0.006364">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:27.491269" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:27.484842" elapsed="0.006513">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:29.506998" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:29.501860" elapsed="0.005212">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:31.523697" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:31.516479" elapsed="0.007287">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:33.539811" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:33.533406" elapsed="0.006467">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:35.554803" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:35.549013" elapsed="0.005858">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:37.569954" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:37.565220" elapsed="0.004788">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:39.583137" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:39.578927" elapsed="0.004263">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:41.597960" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:41.591687" elapsed="0.006334">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:43.613603" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:43.607413" elapsed="0.006302">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:45.629015" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:45.623239" elapsed="0.005842">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:47.642944" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:47.638745" elapsed="0.004254">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:49.657444" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:49.651271" elapsed="0.006225">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:51.672028" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:51.665860" elapsed="0.006223">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:53.686771" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:53.680687" elapsed="0.006143">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:55.700877" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:55.695086" elapsed="0.005860">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:57.715040" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:57.710421" elapsed="0.004667">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:57:59.729265" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:57:59.724933" elapsed="0.004395">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:01.743241" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:01.738198" elapsed="0.005095">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:03.757544" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:03.751724" elapsed="0.005883">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:05.771696" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:05.765496" elapsed="0.006268">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:07.786156" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:07.781861" elapsed="0.004347">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:09.800137" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:09.795637" elapsed="0.004553">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:11.815985" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:11.810624" elapsed="0.005418">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:13.831108" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:13.825345" elapsed="0.005829">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:15.847296" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:15.840475" elapsed="0.006900">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:17.864386" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:17.856381" elapsed="0.008106">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:19.877819" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:19.872258" elapsed="0.005611">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:21.891666" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:21.885900" elapsed="0.005817">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:23.905683" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:23.899840" elapsed="0.005894">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:25.922188" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:25.915784" elapsed="0.006478">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:27.936963" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:27.931037" elapsed="0.006136">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:29.952048" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:29.947641" elapsed="0.004458">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:31.966179" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:31.960291" elapsed="0.005957">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:33.980818" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:33.974978" elapsed="0.005907">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:35.997034" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:35.990378" elapsed="0.006734">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:38.012724" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:38.005090" elapsed="0.007714">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:40.026508" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:40.020692" elapsed="0.005880">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:42.041658" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:42.036311" elapsed="0.005399">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:44.058797" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:44.051246" elapsed="0.007607">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:46.074646" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:46.068535" elapsed="0.006178">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:48.088721" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:48.082900" elapsed="0.005886">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:50.103817" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:50.098441" elapsed="0.005428">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:52.119007" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:52.113182" elapsed="0.005890">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:54.133146" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:54.127252" elapsed="0.005961">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:56.148442" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:56.143378" elapsed="0.005116">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:58:58.163553" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:58:58.157724" elapsed="0.005899">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:00.177736" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:00.173541" elapsed="0.004250">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:02.193657" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:02.188212" elapsed="0.005502">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:04.209689" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:04.204023" elapsed="0.005738">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:06.223341" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:06.219086" elapsed="0.004323">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:08.239134" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:08.232011" elapsed="0.007192">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:10.253395" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:10.247292" elapsed="0.006173">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:12.270029" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:12.263155" elapsed="0.006933">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:14.284438" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:14.278656" elapsed="0.005846">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:16.297875" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:16.292239" elapsed="0.005688">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:18.311129" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:18.305591" elapsed="0.005591">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:20.325860" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:20.320608" elapsed="0.005302">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:22.341666" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:22.335869" elapsed="0.005860">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:24.358263" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:24.351705" elapsed="0.006611">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:26.371095" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:26.364768" elapsed="0.006407">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:28.385307" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:28.379423" elapsed="0.005969">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:30.401177" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:30.395191" elapsed="0.006053">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:32.415103" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:32.409195" elapsed="0.005978">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:34.430424" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:34.423990" elapsed="0.006513">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:36.445989" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:36.440055" elapsed="0.006004">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:38.462783" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:38.456070" elapsed="0.006770">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:40.478732" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:40.472811" elapsed="0.005993">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:42.492976" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:42.487133" elapsed="0.005912">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:44.504828" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:44.499716" elapsed="0.005166">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:46.519404" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:46.514270" elapsed="0.005184">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:48.536315" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:48.529575" elapsed="0.006801">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:50.552195" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:50.545867" elapsed="0.006402">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:52.565837" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:52.561668" elapsed="0.004221">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:54.583309" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:54.576015" elapsed="0.007359">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:56.597834" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:56.592085" elapsed="0.005814">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T04:59:58.611367" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T04:59:58.605587" elapsed="0.005848">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:00.625316" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:00.619114" elapsed="0.006281">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:02.641169" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:02.634177" elapsed="0.007076">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:04.654038" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:04.647786" elapsed="0.006325">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:06.671143" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:06.664213" elapsed="0.006985">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:08.683548" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:08.677364" elapsed="0.006257">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:10.700143" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:10.693993" elapsed="0.006215">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:12.715045" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:12.709927" elapsed="0.005177">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:14.729943" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:14.724140" elapsed="0.005870">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:16.744472" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:16.739686" elapsed="0.004839">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:18.759331" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:18.754317" elapsed="0.005083">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:20.774039" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:20.768102" elapsed="0.006008">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:22.788504" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:22.781599" elapsed="0.006998">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:24.805685" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:24.798222" elapsed="0.007530">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:26.820711" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:26.814216" elapsed="0.006579">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:28.837618" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:28.830201" elapsed="0.007489">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:30.851860" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:30.846083" elapsed="0.005842">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:32.868917" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:32.861479" elapsed="0.007493">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:34.882861" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:34.877021" elapsed="0.005909">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:36.897172" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:36.891384" elapsed="0.005854">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:38.912171" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:38.904678" elapsed="0.007630">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:40.925100" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:40.919211" elapsed="0.005967">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:42.939882" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:42.932745" elapsed="0.007215">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:44.956371" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:44.950291" elapsed="0.006148">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:46.970181" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:46.964403" elapsed="0.005842">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:48.986830" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:48.979710" elapsed="0.007172">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:50.995659" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:50.991479" elapsed="0.004230">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:53.011655" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:53.005362" elapsed="0.006362">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:55.026815" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:55.021559" elapsed="0.005324">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:57.044062" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:57.036687" elapsed="0.007430">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:00:59.057948" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:00:59.053665" elapsed="0.004338">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:01.074374" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:01.067423" elapsed="0.007002">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:03.088589" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:03.082747" elapsed="0.005913">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:05.103107" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:05.097246" elapsed="0.005928">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:07.116878" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:07.110934" elapsed="0.006008">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:09.130578" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:09.124000" elapsed="0.006636">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:11.144569" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:11.138749" elapsed="0.005880">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:13.160550" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:13.154343" elapsed="0.006277">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:15.174373" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:15.168576" elapsed="0.005854">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:17.189130" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:17.183323" elapsed="0.005870">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:19.203399" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:19.198665" elapsed="0.004790">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:21.216513" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:21.212257" elapsed="0.004316">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:23.231253" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:23.225310" elapsed="0.006010">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:25.244610" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:25.238909" elapsed="0.005756">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:27.259733" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:27.254393" elapsed="0.005393">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:29.272725" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:29.267276" elapsed="0.005507">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:31.288134" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:31.282910" elapsed="0.005297">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:33.303915" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:33.298410" elapsed="0.005557">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:35.318797" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:35.312571" elapsed="0.006288">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:37.335291" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:37.328713" elapsed="0.006630">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:39.349586" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:39.343797" elapsed="0.005852">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:41.365194" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:41.359150" elapsed="0.006111">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:43.381503" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:43.375485" elapsed="0.006089">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:45.396682" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:45.390155" elapsed="0.006584">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:47.411410" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:47.405571" elapsed="0.005907">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:49.424314" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:49.420143" elapsed="0.004238">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:51.440283" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:51.433899" elapsed="0.006472">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:53.453971" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:53.449812" elapsed="0.004210">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:55.468050" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:55.463877" elapsed="0.004226">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:57.481883" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:57.476123" elapsed="0.005815">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:01:59.496102" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:01:59.490438" elapsed="0.005713">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:01.511603" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:01.505679" elapsed="0.005993">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:03.526230" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:03.521190" elapsed="0.005111">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:05.540663" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:05.534782" elapsed="0.005949">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:07.549333" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:07.545191" elapsed="0.004205">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:09.562980" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:09.557272" elapsed="0.005765">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:11.578271" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:11.572066" elapsed="0.006273">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:13.592178" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:13.587904" elapsed="0.004327">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:15.607665" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:15.602494" elapsed="0.005238">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:17.616710" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:17.612530" elapsed="0.004234">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:19.631140" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:19.624611" elapsed="0.006587">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:21.645518" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:21.639681" elapsed="0.005901">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:23.659189" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:23.653330" elapsed="0.005924">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:25.674450" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:25.668591" elapsed="0.005943">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:27.687500" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:27.681125" elapsed="0.006444">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:29.702219" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:29.697325" elapsed="0.004951">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:31.718607" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:31.712311" elapsed="0.006371">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:33.731817" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:33.727650" elapsed="0.004220">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:35.746592" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:35.740776" elapsed="0.005901">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:37.761264" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:37.753705" elapsed="0.007671">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:39.775630" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:39.769816" elapsed="0.005878">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:41.791423" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:41.785387" elapsed="0.006110">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:43.806447" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:43.800687" elapsed="0.005823">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:45.819721" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:45.815585" elapsed="0.004184">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:47.834626" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:47.828851" elapsed="0.005839">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:49.850010" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:49.845168" elapsed="0.004928">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:51.866330" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:51.860050" elapsed="0.006354">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:53.880934" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:53.875999" elapsed="0.004983">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:55.896166" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:55.890730" elapsed="0.005488">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:57.911580" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:57.905936" elapsed="0.005725">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:02:59.925881" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:02:59.919585" elapsed="0.006373">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:03:01.940297" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:03:01.935534" elapsed="0.004817">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:03:03.953996" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:03:03.948116" elapsed="0.005929">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:03:05.968651" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:03:05.964148" elapsed="0.004566">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:03:07.983734" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:03:07.977463" elapsed="0.006346">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:03:09.998044" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:03:09.992175" elapsed="0.005921">Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<msg time="2026-06-03T05:03:12.009218" level="FAIL">Variable '${flow_count_after_add}' not found.</msg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="FAIL" start="2026-06-03T05:03:12.003811" elapsed="0.005469">Variable '${flow_count_after_add}' not found.</status>
</kw>
<msg time="2026-06-03T05:03:12.009428" level="FAIL">Keyword 'ClusterOpenFlow.Check_Flows_Operational_Datastore_On_Member' failed after retrying for 6 minutes 40 seconds. The last error was: Variable '${flow_count_after_add}' not found.</msg>
<arg>${oper_ds_timeout}</arg>
<arg>2s</arg>
<arg>ClusterOpenFlow.Check_Flows_Operational_Datastore_On_Member</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-06-03T04:56:31.078952" elapsed="400.930710">Keyword 'ClusterOpenFlow.Check_Flows_Operational_Datastore_On_Member' failed after retrying for 6 minutes 40 seconds. The last error was: Variable '${flow_count_after_add}' not found.</status>
</kw>
<kw name="Get Current Date" owner="DateTime">
<var>${oper_datastore_write_end_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.009917" elapsed="0.000027"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<var>${oper_datastore_write_time}</var>
<arg>${oper_datastore_write_end_time}</arg>
<arg>${config_datastore_write_start_time}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.010126" elapsed="0.000025"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${oper_datastore_write_rate}</var>
<arg>${flow_count_after_add} / ${oper_datastore_write_time}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.010361" elapsed="0.000027"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>${\n}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.010565" elapsed="0.000024"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The oper_datastore_write_time is ${oper_datastore_write_time}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.010757" elapsed="0.000023"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The oper_datastore_write_rate is ${oper_datastore_write_rate}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.010946" elapsed="0.000024"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${oper_datastore_write_time}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.011153" elapsed="0.000023"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${oper_datastore_write_rate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.011371" elapsed="0.000026"/>
</kw>
<doc>Check Flows in Operational Datastore</doc>
<status status="FAIL" start="2026-06-03T04:56:31.078514" elapsed="400.933067">Keyword 'ClusterOpenFlow.Check_Flows_Operational_Datastore_On_Member' failed after retrying for 6 minutes 40 seconds. The last error was: Variable '${flow_count_after_add}' not found.</status>
</test>
<test id="s1-t7" name="Stop Mininet Connected To Follower Node1 After Reconcilliation" line="133">
<kw name="Stop Mininet And Exit" owner="MininetKeywords">
<msg time="2026-06-03T05:03:12.023629" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<doc>Stops Mininet and exits session ${mininet_conn}</doc>
<status status="FAIL" start="2026-06-03T05:03:12.018477" elapsed="0.005199">Variable '${mininet_conn_id}' not found.</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>${mininet_timeout}</arg>
<arg>2s</arg>
<arg>ClusterOpenFlow.Verify_Switch_Connections_Running_On_Member</arg>
<arg>0</arg>
<arg>${Inventory_Leader}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.023885" elapsed="0.000025"/>
</kw>
<doc>Stop mininet and exit connection.</doc>
<status status="FAIL" start="2026-06-03T05:03:12.011956" elapsed="0.012112">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-t8" name="Delete All Flows From Follower Node2" line="143">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-06-03T05:03:12.025641" level="INFO">${config_datastore_delete_start_time} = 2026-06-03 05:03:12.025</msg>
<var>${config_datastore_delete_start_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-06-03T05:03:12.025233" elapsed="0.000445"/>
</kw>
<kw name="Delete Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-06-03T05:03:12.036760" level="FAIL">Variable '${temp_json_config_del}' not found.</msg>
<arg>${temp_json_config_del}</arg>
<arg>${Follower_Node_2}</arg>
<arg>${operation_timeout}</arg>
<doc>Delete Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-06-03T05:03:12.031853" elapsed="0.004950">Variable '${temp_json_config_del}' not found.</status>
</kw>
<kw name="Get Current Date" owner="DateTime">
<var>${config_datastore_delete_end_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.037001" elapsed="0.000022"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<var>${config_datastore_delete_time}</var>
<arg>${config_datastore_delete_end_time}</arg>
<arg>${config_datastore_delete_start_time}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.037187" elapsed="0.000020"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${config_datastore_delete_rate}</var>
<arg>${flow_count_after_add} / ${config_datastore_delete_time}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.037380" elapsed="0.000021"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>${\n}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.037542" elapsed="0.000020"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The config_datastore_delete_time is ${config_datastore_delete_time}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.037736" elapsed="0.000021"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The config_datastore_delete_rate is ${config_datastore_delete_rate}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.037956" elapsed="0.000023"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${config_datastore_delete_time}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.038123" elapsed="0.000019"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${config_datastore_delete_rate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.038282" elapsed="0.000019"/>
</kw>
<doc>100K Flows deleted via Follower Node2 and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-06-03T05:03:12.024547" elapsed="0.013906">Variable '${temp_json_config_del}' not found.</status>
</test>
<test id="s1-t9" name="Log Results And Determine Status" line="161">
<kw name="Append To File" owner="OperatingSystem">
<msg time="2026-06-03T05:03:12.040204" level="INFO" html="true">Appended to file '&lt;a href="file:///w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/rate.csv"&gt;/w/workspace/openflowplugin-csit-3node-clustering-perf-bulkomatic-only-titanium/rate.csv&lt;/a&gt;'.</msg>
<arg>${rate_results_file}</arg>
<arg>Config DS,OVS Switch,Operational DS\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="PASS" start="2026-06-03T05:03:12.039388" elapsed="0.000997"/>
</kw>
<kw name="Append To File" owner="OperatingSystem">
<msg time="2026-06-03T05:03:12.044429" level="FAIL">Variable '${config_datastore_write_rate}' not found.</msg>
<arg>${rate_results_file}</arg>
<arg>${config_datastore_write_rate},${Mininet_write_rate},${oper_datastore_write_rate}\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="FAIL" start="2026-06-03T05:03:12.040545" elapsed="0.003924">Variable '${config_datastore_write_rate}' not found.</status>
</kw>
<kw name="Append To File" owner="OperatingSystem">
<arg>${time_results_file}</arg>
<arg>Config DS,OVS Switch,Operational DS\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.044627" elapsed="0.000021"/>
</kw>
<kw name="Append To File" owner="OperatingSystem">
<arg>${time_results_file}</arg>
<arg>${config_datastore_write_time},${Mininet_write_time},${oper_datastore_write_time}\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="NOT RUN" start="2026-06-03T05:03:12.044787" elapsed="0.000020"/>
</kw>
<doc>Log results for plotting.</doc>
<status status="FAIL" start="2026-06-03T05:03:12.038871" elapsed="0.006057">Variable '${config_datastore_write_rate}' not found.</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-06-03T05:03:12.045843" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-06-03T05:03:12.045742" elapsed="0.000244"/>
</kw>
<doc>Test suite for 3Node Cluster - 100K flows and 10 DPNs in Cluster Scale Up scenario</doc>
<status status="FAIL" start="2026-06-03T04:56:18.095523" elapsed="413.950498"/>
</suite>
<statistics>
<total>
<stat pass="0" fail="9" skip="0">All Tests</stat>
</total>
<tag>
</tag>
<suite>
<stat name="openflowplugin-clustering-perf-bulkomatic.txt" id="s1" pass="0" fail="9" skip="0">openflowplugin-clustering-perf-bulkomatic.txt</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
