Resource ${CURDIR}/Utils.robot # for Run_Command_On_Controller
*** Variables ***
+${JAVA_HOME} ${EMPTY} # releng/builder scripts should provide correct value
${JOLOKIA_CONF_SHARD_MANAGER_URI} jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore
${JOLOKIA_OPER_SHARD_MANAGER_URI} jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore
${JOLOKIA_READ_URI} jolokia/read/org.opendaylight.controller
-${KARAF_HOME} ${WORKSPACE}${/}${BUNDLEFOLDER}
${RESTCONF_MODULES_DIR} ${CURDIR}/../variables/restconf/modules
*** Keywords ***
${already_done} = BuiltIn.Get_Variable_Value \${ClusterManagement__has_setup_run} False
BuiltIn.Return_From_Keyword_If ${already_done}
BuiltIn.Set_Suite_Variable \${ClusterManagement__has_setup_run} True
- ${status} ${possibly_int_of_members} = BuiltIn.Run_Keyword_And_Ignore_Error BuiltIn.Convert_To_Integer ${NUM_ODL_SYSTEM}
+ ${cluster_size} = BuiltIn.Get_Variable_Value \${NUM_ODL_SYSTEM} 1
+ ${status} ${possibly_int_of_members} = BuiltIn.Run_Keyword_And_Ignore_Error BuiltIn.Convert_To_Integer ${cluster_size}
${int_of_members} = BuiltIn.Set_Variable_If '${status}' != 'PASS' ${1} ${possibly_int_of_members}
ClusterManagement__Compute_Derived_Variables int_of_members=${int_of_members}
[Arguments] ${member_index_list}=${EMPTY} ${confirm}=True
[Documentation] If the list is empty, kill all ODL instances. Otherwise, kill members based on present indices.
... If \${confirm} is True, sleep 1 second and verify killed instances are not there anymore.
- ${command} = BuiltIn.Set_Variable ps axf | grep karaf | grep -v grep | awk '{print \"kill -9 \" $1}' | sh
+ ${command} = BuiltIn.Set_Variable ps axf | grep java | grep karaf | awk '{print \"kill -9 \" $1}' | sh
Run_Command_On_List_Or_All command=${command} member_index_list=${member_index_list}
BuiltIn.Return_From_Keyword_If not ${confirm}
# TODO: Convert to WUKS with configurable timeout if it turns out 1 second is not enough.
: FOR ${index} IN @{index_list}
\ Verify_Karaf_Is_Not_Running_On_Member member_index=${index}
+Isolate_Member_From_List_Or_All
+ [Arguments] ${isolate_member_index} ${member_index_list}=${EMPTY}
+ [Documentation] If the list is empty, isolate member from all ODL instances. Otherwise, isolate member based on present indices.
+ ${index_list} = ClusterManagement__Given_Or_Internal_Index_List given_list=${member_index_list}
+ ${source} = Get From Dictionary ${ClusterManagement__index_to_ip_mapping} ${isolate_member_index}
+ : FOR ${index} IN @{index_list}
+ \ ${destination} = Get From Dictionary ${ClusterManagement__index_to_ip_mapping} ${index}
+ \ ${command} = BuiltIn.Set_Variable sudo /sbin/iptables -I OUTPUT -p all --source ${source} --destination ${destination} -j DROP
+ \ Run Keyword If "${index}" != "${isolate_member_index}" Run_Command_On_Member command=${command} member_index=${isolate_member_index}
+ ${command} = BuiltIn.Set_Variable sudo /sbin/iptables -L -n
+ ${output} = Run_Command_On_Member command=${command} member_index=${isolate_member_index}
+ Log ${output}
+
+Rejoin_Member_From_List_Or_All
+ [Arguments] ${rejoin_member_index} ${member_index_list}=${EMPTY}
+ [Documentation] If the list is empty, rejoin member from all ODL instances. Otherwise, rejoin member based on present indices.
+ ${index_list} = ClusterManagement__Given_Or_Internal_Index_List given_list=${member_index_list}
+ ${source} = Get From Dictionary ${ClusterManagement__index_to_ip_mapping} ${rejoin_member_index}
+ : FOR ${index} IN @{index_list}
+ \ ${destination} = Get From Dictionary ${ClusterManagement__index_to_ip_mapping} ${index}
+ \ ${command} = BuiltIn.Set_Variable sudo /sbin/iptables -D OUTPUT -p all --source ${source} --destination ${destination} -j DROP
+ \ Run Keyword If "${index}" != "${rejoin_member_index}" Run_Command_On_Member command=${command} member_index=${rejoin_member_index}
+ ${command} = BuiltIn.Set_Variable sudo /sbin/iptables -L -n
+ ${output} = Run_Command_On_Member command=${command} member_index=${rejoin_member_index}
+ Log ${output}
+
+Flush_Iptables_From_List_Or_All
+ [Arguments] ${member_index_list}=${EMPTY}
+ [Documentation] If the list is empty, flush IPTables in all ODL instances. Otherwise, flush member based on present indices.
+ ${command} = BuiltIn.Set_Variable sudo iptables -v -F
+ ${output} = Run_Command_On_List_Or_All command=${command} member_index_list=${member_index_list}
+
ClusterManagement__Build_List
[Arguments] ${member}
${member_int}= BuiltIn.Convert_To_Integer ${member}
Kill_Members_From_List_Or_All ${index_list} ${confirm}
Clean_Journals_And_Snapshots_On_List_Or_All
- [Arguments] ${member_index_list}=${EMPTY}
+ [Arguments] ${member_index_list}=${EMPTY} ${karaf_home}=${WORKSPACE}${/}${BUNDLEFOLDER}
[Documentation] Delete journal and snapshots directories on every node listed (or all).
${index_list} = ClusterManagement__Given_Or_Internal_Index_List given_list=${member_index_list}
- ${command} = Set Variable rm -rf "${KARAF_HOME}/journal" "${KARAF_HOME}/snapshots"
+ ${command} = Set Variable rm -rf "${karaf_home}/journal" "${karaf_home}/snapshots"
: FOR ${index} IN @{index_list} # usually: 1, 2, 3.
\ Run_Command_On_Member command=${command} member_index=${index}
Start_Members_From_List_Or_All
- [Arguments] ${member_index_list}=${EMPTY} ${wait_for_sync}=True ${timeout}=300s
+ [Arguments] ${member_index_list}=${EMPTY} ${wait_for_sync}=True ${timeout}=300s ${karaf_home}=${WORKSPACE}${/}${BUNDLEFOLDER} ${export_java_home}=${JAVA_HOME}
[Documentation] If the list is empty, start all cluster members. Otherwise, start members based on present indices.
... If ${wait_for_sync}, wait for cluster sync on listed members.
- ${command} = BuiltIn.Set_Variable ${KARAF_HOME}/bin/start
+ ... Optionally karaf_home can be overriden. Optionally specific JAVA_HOME is used for starting.
+ ${base_command} = BuiltIn.Set_Variable ${karaf_home}/bin/start
+ ${command} = BuiltIn.Set_Variable_If "${export_java_home}" export JAVA_HOME="${export_java_home}"; ${base_command} ${base_command}
Run_Command_On_List_Or_All command=${command} member_index_list=${member_index_list}
BuiltIn.Return_From_Keyword_If not ${wait_for_sync}
BuiltIn.Wait_Until_Keyword_Succeeds ${timeout} 1s Check_Cluster_Is_In_Sync member_index_list=${member_index_list}
${index_list} = ClusterManagement__Given_Or_Internal_Index_List given_list=${member_index_list}
: FOR ${index} IN @{index_list} # usually: 1, 2, 3.
\ ${status} = Get_Sync_Status_Of_Member member_index=${index}
- \ # The previous line may have failed already. If not, check status.
\ BuiltIn.Continue_For_Loop_If 'True' == '${status}'
\ BuiltIn.Fail Index ${index} has incorrect status: ${status}