Make ClusterManagement keywords preserve active SSH connection
[integration/test.git] / csit / libraries / ClusterManagement.robot
index fbd3fbe65652eb5ded172a7ff8f253d8221b5033..c2b8ac678722344f19e0b87dad576d57a74cb510 100644 (file)
@@ -10,16 +10,12 @@ Documentation     Resource housing Keywords common to several suites for cluster
 ...
 ...               This resource holds private state (in suite variables),
 ...               which is generated once at Setup.
-...               The state includes list with indexes (numbers enumerating cluster members),
-...               IP addresses and Http (RequestsLibrary) sessions.
+...               The state includes IP addresses and Http (RequestsLibrary) sessions.
 ...               Most functionality deals with stopping/starting controllers
 ...               and finding leaders/followers for a Shard.
 ...
 ...               odl-jolokia is assumed to be installed.
 ...
-...               Keywords which run commands on ODL systems do not preserve active SSH session.
-...               TODO: Should they?
-...
 ...               Keywords are ordered from friendly ones to fiddly ones.
 ...               TODO: Figure out more deterministic but still user-friendly ordering.
 ...
@@ -63,6 +59,18 @@ Kill_Members_From_List_Or_All
     : FOR    ${index}    IN    @{index_list}
     \    Verify_Karaf_Is_Not_Running_On_Member    member_index=${index}
 
+ClusterManagement__Build_List
+    [Arguments]    ${member}
+    ${member_int}=    BuiltIn.Convert_To_Integer    ${member}
+    ${index_list}=    BuiltIn.Create_List    ${member_int}
+    [Return]    ${index_list}
+
+Kill_Single_Member
+    [Arguments]    ${member}    ${confirm}=True
+    [Documentation]    Convenience keyword that kills the specified member of the cluster.
+    ${index_list}=    ClusterManagement__Build_List    ${member}
+    Kill_Members_From_List_Or_All    ${index_list}    ${confirm}
+
 Clean_Journals_And_Snapshots_On_List_Or_All
     [Arguments]    ${member_index_list}=${EMPTY}
     [Documentation]    Delete journal and snapshots directories on every node listed (or all).
@@ -81,6 +89,12 @@ Start_Members_From_List_Or_All
     BuiltIn.Wait_Until_Keyword_Succeeds    ${timeout}    1s    Check_Cluster_Is_In_Sync    member_index_list=${member_index_list}
     # TODO: Do we also want to check Shard Leaders here?
 
+Start_Single_Member
+    [Arguments]    ${member}    ${wait_for_sync}=True    ${timeout}=300s
+    [Documentation]    Convenience keyword that starts the specified member of the cluster.
+    ${index_list}=    ClusterManagement__Build_List    ${member}
+    Start_Members_From_List_Or_All    ${index_list}    ${wait_for_sync}    ${timeout}
+
 Verify_Leader_Exists_For_Each_Shard
     [Arguments]    ${shard_name_list}    ${shard_type}=operational    ${member_index_list}=${EMPTY}    ${verify_restconf}=True
     [Documentation]    For each shard name, call Get_Leader_And_Followers_For_Shard.
@@ -92,7 +106,8 @@ Get_Leader_And_Followers_For_Shard
     [Arguments]    ${shard_name}=default    ${shard_type}=operational    ${validate}=True    ${member_index_list}=${EMPTY}    ${verify_restconf}=True
     [Documentation]    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.
-    ${leader_list}    ${follower_list} =    Get_State_Info_For_Shard    shard_name=${shard_name}    shard_type=${shard_type}    validate=True    member_index_list=${member_index_list}    verify_restconf=${verify_restconf}
+    ${leader_list}    ${follower_list} =    Get_State_Info_For_Shard    shard_name=${shard_name}    shard_type=${shard_type}    validate=True    member_index_list=${member_index_list}
+    ...    verify_restconf=${verify_restconf}
     ${leader_count} =    BuiltIn.Get_Length    ${leader_list}
     BuiltIn.Run_Keyword_If    ${leader_count} < 1    BuiltIn.Fail    No leader found.
     BuiltIn.Length_Should_Be    ${leader_list}    ${1}    Too many Leaders.
@@ -238,5 +253,5 @@ ClusterManagement__Include_Member_Index
     Collections.Set_To_Dictionary    ${index_to_ip_mapping}    ${index}    ${member_ip}
     # Http session, with ${AUTH}, without headers.
     ${session_alias} =    Resolve_Http_Session_For_Member    member_index=${index}
-    RequestsLibrary.Create_Session    ${session_alias}    http://${member_ip}:${RESTCONFPORT}    auth=${AUTH}
+    RequestsLibrary.Create_Session    ${session_alias}    http://${member_ip}:${RESTCONFPORT}    auth=${AUTH}    max_retries=0
     Collections.Append_To_List    ${session_list}    ${session_alias}