From: Luis Gomez Date: Fri, 7 Oct 2016 05:40:27 +0000 (-0700) Subject: Remove ClusterKeywords library X-Git-Tag: release/beryllium-sr4~35 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=8b5ee37789578baacf30e304220c60cca848bc48;p=integration%2Ftest.git Remove ClusterKeywords library Nobody is using it anymore. Change-Id: Ic2fac8b7422e64925243b65750e211f7739c4042 Signed-off-by: Luis Gomez --- diff --git a/csit/libraries/ClusterKeywords.robot b/csit/libraries/ClusterKeywords.robot deleted file mode 100644 index 9ac130194d..0000000000 --- a/csit/libraries/ClusterKeywords.robot +++ /dev/null @@ -1,410 +0,0 @@ -*** Settings *** -Library RequestsLibrary -Library Collections -Library UtilLibrary.py -Library ClusterStateLibrary.py -Library ./HsfJson/hsf_json.py -Resource Utils.robot - -*** Variables *** -${jolokia_conf} /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore -${jolokia_oper} /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore -${jolokia_read} /jolokia/read/org.opendaylight.controller - -*** Keywords *** -Create Controller Index List - [Documentation] Reads number of controllers and returns a list with all controllers indexes. - ${controller_index_list} Create List - ${NUM_ODL_SYSTEM}= Convert to Integer ${NUM_ODL_SYSTEM} - : FOR ${i} IN RANGE ${NUM_ODL_SYSTEM} - \ Append To List ${controller_index_list} ${i+1} - [Return] ${controller_index_list} - -Create Controller Sessions - [Documentation] Creates REST session to all controller instances. - ${NUM_ODL_SYSTEM}= Convert to Integer ${NUM_ODL_SYSTEM} - : FOR ${i} IN RANGE ${NUM_ODL_SYSTEM} - \ Log Create Session ${ODL_SYSTEM_${i+1}_IP} - \ RequestsLibrary.Create Session controller${i+1} http://${ODL_SYSTEM_${i+1}_IP}:${RESTCONFPORT} auth=${AUTH} - -Get Cluster Shard Status - [Arguments] ${controller_index_list} ${shard_type} ${shard} - [Documentation] Checks ${shard} status and returns Leader index and a list of Followers from a ${controller_index_list}. - ... ${shard_type} is either config or operational. - ${lenght}= Get Length ${controller_index_list} - Run Keyword If '${shard_type}' == 'config' Set Test Variable ${type} DistributedConfigDatastore - Run Keyword If '${shard_type}' == 'operational' Set Test Variable ${type} DistributedOperationalDatastore - Should Not Be Empty ${type} Wrong type, valid values are config and operational. - ${leader}= Set Variable 0 - ${follower_list}= Create List - : FOR ${i} IN @{controller_index_list} - \ ${data}= Utils.Get Data From URI controller${i} ${jolokia_read}:Category=Shards,name=member-${i}-shard-${shard}-${shard_type},type=${type} - \ Log ${data} - \ ${json}= RequestsLibrary.To Json ${data} - \ ${status}= Get From Dictionary &{json}[value] RaftState - \ Log Controller ${ODL_SYSTEM_${i}_IP} is ${status} for shard ${shard} - \ Run Keyword If '${status}' == 'Leader' Set Test Variable ${leader} ${i} - \ Run Keyword If '${status}' == 'Follower' Append To List ${follower_list} ${i} - Should Not Be Equal ${leader} 0 No Leader elected in shard ${shard_type} ${shard} - Length Should Be ${follower_list} ${lenght-1} Not enough or too many Followers in shard ${shard_type} ${shard} - [Return] ${leader} ${follower_list} - -Get Cluster Entity Owner - [Arguments] ${controller_index_list} ${device_type} ${device} - [Documentation] Checks Entity Owner status for a ${device} and returns owner index and list of candidates from a ${controller_index_list}. - ... ${device_type} can be openflow, ovsdb, etc. - ${owner} ${candidates_list}= Get Device Entity Owner And Candidates Indexes controller@{controller_index_list}[0] ${device_type} ${device} - List Should Contain Value ${controller_index_list} ${owner} Owner ${owner} not exisiting in ${controller_index_list} - List Should Contain Sublist ${candidates_list} ${controller_index_list} Candidates are missing in ${candidates_list} - Remove Values From List ${candidates_list} ${owner} - [Return] ${owner} ${candidates_list} - -Get Device Entity Owner And Followers Indexes - [Arguments] ${session} ${device_type} ${device} - [Documentation] Returns the owner and followers indexes for a ${device}. Follower list = candidate list - owner - ${owner} ${candidates_list}= Get Device Entity Owner And Candidates Indexes ${session} ${device_type} ${device} - Remove Values From List ${candidates_list} ${owner} - [Return] ${owner} ${candidates_list} - -Get Device Entity Owner And Candidates Indexes - [Arguments] ${session} ${device_type} ${device} - [Documentation] Returns the owner and candidates indexes for a ${device}. Returns raw information, does not check missing - ... cluster nodes or so. - ${candidates_list}= Create List - ${data}= Utils.Get Data From URI ${session} /restconf/operational/entity-owners:entity-owners - Log ${data} - ${device_style}= BuiltIn.Set_Variable_If '${device_type}' == 'netconf' openflow ${device_type} - ${entity_type}= BuiltIn.Set_Variable_If '${device_type}' == 'netconf' netconf-node/${device} ${device_type} - ${clear_data}= Run Keyword If '${device_style}' == 'openflow' Extract OpenFlow Device Data ${data} - ... ELSE IF '${device_style}' == 'ovsdb' Extract Ovsdb Device Data ${data} - ... ELSE Fail Not recognized device type: ${device_type} - ${json}= RequestsLibrary.To Json ${clear_data} - ${entity_type_list}= Get From Dictionary &{json}[entity-owners] entity-type - ${entity_type_index}= Get Index From List Of Dictionaries ${entity_type_list} type ${entity_type} - Should Not Be Equal ${entity_type_index} -1 No Entity Owner found for ${device_type} - ${entity_list}= Get From Dictionary @{entity_type_list}[${entity_type_index}] entity - ${entity_index}= Utils.Get Index From List Of Dictionaries ${entity_list} id ${device} - Should Not Be Equal ${entity_index} -1 Device ${device} not found in Entity Owner ${device_type} - ${entity_owner}= Get From Dictionary @{entity_list}[${entity_index}] owner - Should Not Be Empty ${entity_owner} No owner found for ${device} - ${owner}= Replace String ${entity_owner} member- ${EMPTY} - ${owner}= Convert To Integer ${owner} - ${entity_candidates_list}= Get From Dictionary @{entity_list}[${entity_index}] candidate - : FOR ${entity_candidate} IN @{entity_candidates_list} - \ ${candidate}= Replace String &{entity_candidate}[name] member- ${EMPTY} - \ ${candidate}= Convert To Integer ${candidate} - \ Append To List ${candidates_list} ${candidate} - [Return] ${owner} ${candidates_list} - -Extract OpenFlow Device Data - [Arguments] ${data} - [Documentation] Remove superfluous OpenFlow device data from Entity Owner printout. - ${clear_data}= Replace String ${data} /general-entity:entity[general-entity:name=' ${EMPTY} - ${clear_data}= Replace String ${clear_data} '] ${EMPTY} - Log ${clear_data} - [Return] ${clear_data} - -Extract Ovsdb Device Data - [Arguments] ${data} - [Documentation] Remove superfluous OVSDB device data from Entity Owner printout. - ${clear_data}= Replace String ${data} /network-topology:network-topology/network-topology:topology[network-topology:topology-id='ovsdb:1']/network-topology:node[network-topology:node-id=' ${EMPTY} - ${clear_data}= Replace String ${clear_data} '] ${EMPTY} - Log ${clear_data} - [Return] ${clear_data} - -Check Item Occurrence At URI In Cluster - [Arguments] ${controller_index_list} ${dictionary_item_occurrence} ${uri} - [Documentation] Send a GET with the supplied ${uri} to all cluster instances in ${controller_index_list} - ... and check for occurrences of items expressed in a dictionary ${dictionary_item_occurrence}. - : FOR ${i} IN @{controller_index_list} - \ ${data} Utils.Get Data From URI controller${i} ${uri} - \ Log ${data} - \ Utils.Check Item Occurrence ${data} ${dictionary_item_occurrence} - -Put And Check At URI In Cluster - [Arguments] ${controller_index_list} ${controller_index} ${uri} ${body} - [Documentation] Wrapper keyword for "Create Data And Check At URI In Cluster" using PUT - Create Data And Check At URI In Cluster ${controller_index_list} ${controller_index} ${uri} ${body} PUT - -Post And Check At URI In Cluster - [Arguments] ${controller_index_list} ${controller_index} ${uri} ${body} - [Documentation] Wrapper keyword for "Create Data And Check At URI In Cluster" using POST - Create Data And Check At URI In Cluster ${controller_index_list} ${controller_index} ${uri} ${body} POST - -Create Data And Check At URI In Cluster - [Arguments] ${controller_index_list} ${controller_index} ${uri} ${body} ${create_method}=PUT - [Documentation] Send a ${create_method} REST call with the supplied ${uri} and ${body} (json string) to a - ... ${controller_index} and check the data is replicated in all instances in ${controller_index_list}. - ${expected_body}= Hsf Json ${body} - Log ${body} - ${resp} Run Keyword If "${create_method}" == "POST" RequestsLibrary.Post Request controller${controller_index} ${uri} data=${body} - ... headers=${HEADERS} - ... ELSE RequestsLibrary.Put Request controller${controller_index} ${uri} data=${body} headers=${HEADERS_YANG_JSON} - Log ${resp.content} - Log ${resp.status_code} - ${status_code}= Convert To String ${resp.status_code} - Should Match Regexp ${status_code} 20(0|1) - : FOR ${i} IN @{controller_index_list} - \ ${data} Wait Until Keyword Succeeds 5s 1s Get Data From URI controller${i} - \ ... ${uri} - \ Log ${data} - \ ${received_body} Hsf Json ${data} - \ Should Be Equal ${expected_body} ${received_body} - -Delete And Check At URI In Cluster - [Arguments] ${controller_index_list} ${controller_index} ${uri} - [Documentation] Send a DELETE with the supplied ${uri} to a ${controller_index} - ... and check the data is removed from all instances in ${controller_index_list}. - ${resp} RequestsLibrary.Delete Request controller${controller_index} ${uri} - Should Be Equal As Strings ${resp.status_code} 200 - : FOR ${i} IN @{controller_index_list} - \ Wait Until Keyword Succeeds 5s 1s No Content From URI controller${i} ${uri} - -Kill Multiple Controllers - [Arguments] @{controller_index_list} - [Documentation] Give this keyword a scalar or list of controllers to be stopped. - : FOR ${i} IN @{controller_index_list} - \ ${output}= Utils.Run Command On Controller ${ODL_SYSTEM_${i}_IP} ps axf | grep karaf | grep -v grep | awk '{print \"kill -9 \" $1}' | sh - \ ClusterKeywords.Controller Down Check ${ODL_SYSTEM_${i}_IP} - -Start Multiple Controllers - [Arguments] ${timeout} @{controller_index_list} - [Documentation] Give this keyword a scalar or list of controllers to be started. - : FOR ${i} IN @{controller_index_list} - \ ${output}= Utils.Run Command On Controller ${ODL_SYSTEM_${i}_IP} ${WORKSPACE}/${BUNDLEFOLDER}/bin/start - : FOR ${i} IN @{controller_index_list} - \ ClusterKeywords.Wait For Controller Sync ${timeout} ${ODL_SYSTEM_${i}_IP} - -Get Controller List - [Arguments] ${exclude_controller}=${EMPTY} - [Documentation] Creates a list of all controllers minus any excluded controller. - Log ${exclude_controller} - @{searchlist} Create List ${ODL_SYSTEM_IP} ${ODL_SYSTEM_2_IP} ${ODL_SYSTEM_3_IP} - Remove Values From List ${searchlist} ${exclude_controller} - Log ${searchlist} - [Return] ${searchlist} - -Get Leader And Verify - [Arguments] ${shard_name} ${old_leader}=${EMPTY} - [Documentation] Returns the IP addr or hostname of the leader of the specified shard. - ... Controllers are specifed in the pybot command line. - ${searchlist} Get Controller List ${old_leader} - ${leader} GetLeader ${shard_name} ${3} ${3} ${1} ${RESTCONFPORT} - ... @{searchlist} - Should Not Be Equal As Strings ${leader} None - Run Keyword If '${old_leader}'!='${EMPTY}' Should Not Be Equal ${old_leader} ${leader} - [Return] ${leader} - -Expect No Leader - [Arguments] ${shard_name} - [Documentation] No leader is elected in the car shard - ${leader} GetLeader ${shard_name} ${3} ${1} ${1} ${RESTCONFPORT} - ... ${CURRENT_CAR_LEADER} - Should Be Equal As Strings ${leader} None - -Get All Followers - [Arguments] ${shard_name} ${exclude_controller}=${EMPTY} - [Documentation] Returns the IP addresses or hostnames of all followers of the specified shard. - ${searchlist} Get Controller List ${exclude_controller} - ${followers} GetFollowers ${shard_name} ${3} ${3} ${1} ${RESTCONFPORT} - ... @{searchlist} - Log ${followers} - Should Not Be Empty ${followers} - [Return] ${followers} - -Stop One Or More Controllers - [Arguments] @{controllers} - [Documentation] Give this keyword a scalar or list of controllers to be stopped. - ${cmd} = Set Variable ${KARAF_HOME}/bin/stop - : FOR ${ip} IN @{controllers} - \ Run Command On Remote System ${ip} ${cmd} - -Stop Controller Node And Verify - [Arguments] ${node} - [Documentation] Stops the given node - @{leader_list}= BuiltIn.Create List ${node} - Kill One Or More Controllers @{leader_list} - Controller Down Check ${node} - -Kill One Or More Controllers - [Arguments] @{controllers} - [Documentation] Give this keyword a scalar or list of controllers to be stopped. - ${cmd} = Set Variable ps axf | grep karaf | grep -v grep | awk '{print \"kill -9 \" $1}' | sh - log ${cmd} - : FOR ${ip} IN @{controllers} - \ Run Command On Remote System ${ip} ${cmd} - -Wait For Cluster Down - [Arguments] ${timeout} @{controllers} - [Documentation] Waits for one or more clustered controllers to be down. - : FOR ${ip} IN @{controllers} - \ ${status}= Run Keyword And Return Status Wait For Controller Down ${timeout} ${ip} - \ Exit For Loop If '${status}' == 'FAIL' - -Wait For Controller Down - [Arguments] ${timeout} ${ip} - [Documentation] Waits for one controllers to be down. - Wait Until Keyword Succeeds ${timeout} 2s Controller Down Check ${ip} - -Controller Down Check - [Arguments] ${ip} - [Documentation] Checks to see if a controller is down by verifying that the karaf process isn't present. - ${cmd} = Set Variable ps axf | grep karaf | grep -v grep | wc -l - ${response} Run Command On COntroller ${ip} ${cmd} - Log Number of controller instances running: ${response} - Should Start With ${response} 0 Controller process found or there may be extra instances of karaf running on the host machine. - -Start One Or More Controllers - [Arguments] @{controllers} - [Documentation] Give this keyword a scalar or list of controllers to be started. - ${cmd} = Set Variable ${KARAF_HOME}/bin/start - : FOR ${ip} IN @{controllers} - \ Run Command On Remote System ${ip} ${cmd} - -Start Controller Node And Verify - [Arguments] ${node} ${start_timeout} - [Documentation] Starts the given node - @{controllers}= BuiltIn.CreateList ${node} - Start One Or More Controllers @{controllers} - Wait For Controller Sync ${start_timeout} @{controllers} - -Wait For Cluster Sync - [Arguments] ${timeout} @{controllers} - [Documentation] Waits for one or more clustered controllers to report Sync Status as true. - : FOR ${ip} IN @{controllers} - \ ${status}= Run Keyword And Return Status Wait For Controller Sync ${timeout} ${ip} - \ Exit For Loop If '${status}' == 'FAIL' - -Wait For Controller Sync - [Arguments] ${timeout} ${ip} - [Documentation] Waits for one controllers to report Sync Status as true. - Wait Until Keyword Succeeds ${timeout} 2s Controller Sync Status Should Be True ${ip} - -Controller Sync Status Should Be True - [Arguments] ${ip} - [Documentation] Checks if Sync Status is true. - ${SyncStatus}= Get Controller Sync Status ${ip} - Should Be Equal ${SyncStatus} ${TRUE} - -Controller Sync Status Should Be False - [Arguments] ${ip} - [Documentation] Checks if Sync Status is false. - ${SyncStatus}= Get Controller Sync Status ${ip} - Should Be Equal ${SyncStatus} ${FALSE} - -Get Controller Sync Status - [Arguments] ${controller_ip} - [Documentation] Return Sync Status. - Create_Session session http://${controller_ip}:${RESTCONFPORT} headers=${HEADERS} auth=${AUTH} max_retries=0 - ${data}= Get Data From URI session ${jolokia_conf} - Log ${data} - ${json}= To Json ${data} - ${value}= Get From Dictionary ${json} value - ${ConfSyncStatus}= Get From Dictionary ${value} SyncStatus - Log Configuration Sync Status: ${ConfSyncStatus} - ${data}= Get Data From URI session ${jolokia_oper} - Log ${data} - ${json}= To Json ${data} - ${value}= Get From Dictionary ${json} value - ${OperSyncStatus}= Get From Dictionary ${value} SyncStatus - Log Operational Sync Status: ${OperSyncStatus} - Run Keyword If ${OperSyncStatus} and ${ConfSyncStatus} Set Test Variable ${SyncStatus} ${TRUE} - ... ELSE Set Test Variable ${SyncStatus} ${FALSE} - [Return] ${SyncStatus} - -Clean One Or More Journals - [Arguments] @{controllers} - [Documentation] Give this keyword a scalar or list of controllers on which to clean journals. - ${del_cmd} = Set Variable rm -rf ${KARAF_HOME}/journal - : FOR ${ip} IN @{controllers} - \ Run Command On Remote System ${ip} ${del_cmd} - -Clean One Or More Snapshots - [Arguments] @{controllers} - [Documentation] Give this keyword a scalar or list of controllers on which to clean snapshots. - ${del_cmd} = Set Variable rm -rf ${KARAF_HOME}/snapshots - : FOR ${ip} IN @{controllers} - \ Run Command On Remote System ${ip} ${del_cmd} - -Show Cluster Configuation Files - [Arguments] @{controllers} - [Documentation] Prints out the cluster configuration files for one or more controllers. - Log controllers: @{controllers} - ${cmd} = Set Variable cat ${KARAF_HOME}/configuration/initial/akka.conf - : FOR ${ip} IN @{controllers} - \ Run Command On Remote System ${ip} ${cmd} - ${cmd} = Set Variable cat ${KARAF_HOME}/configuration/initial/modules.conf - : FOR ${ip} IN @{controllers} - \ Run Command On Remote System ${ip} ${cmd} - ${cmd} = Set Variable cat ${KARAF_HOME}/configuration/initial/module-shards.conf - : FOR ${ip} IN @{controllers} - \ Run Command On Remote System ${ip} ${cmd} - ${cmd} = Set Variable cat ${KARAF_HOME}/configuration/initial/jolokia.xml - : FOR ${ip} IN @{controllers} - \ Run Command On Remote System ${ip} ${cmd} - ${cmd} = Set Variable cat ${KARAF_HOME}/etc/initial/org.apache.karaf.management.cfg - : FOR ${ip} IN @{controllers} - \ Run Command On Remote System ${ip} ${cmd} - ${cmd} = Set Variable cat ${KARAF_HOME}/etc/org.apache.karaf.features.cfg - : FOR ${ip} IN @{controllers} - \ Run Command On Remote System ${ip} ${cmd} - -Isolate a Controller From Cluster - [Arguments] ${isolated controller} @{controllers} - [Documentation] Use IPTables to isolate one controller from the cluster. - ... On the isolated controller it blocks IP traffic to and from each of the other controllers. - : FOR ${controller} IN @{controllers} - \ ${other controller}= Evaluate "${isolated controller}" != "${controller}" - \ Run Keyword If ${other controller} Isolate One Controller From Another ${isolated controller} ${controller} - -Rejoin a Controller To Cluster - [Arguments] ${isolated controller} @{controllers} - [Documentation] Use IPTables to rejoin one controller to the cluster. - ... On the isolated controller it unblocks IP traffic to and from each of the other controllers. - : FOR ${controller} IN @{controllers} - \ ${other controller}= Evaluate "${isolated controller}" != "${controller}" - \ Run Keyword If ${other controller} Rejoin One Controller To Another ${isolated controller} ${controller} - -Isolate One Controller From Another - [Arguments] ${isolated controller} ${controller} - [Documentation] Inserts an IPTable rule to disconnect one controller from another controller in the cluster. - Modify IPTables ${isolated controller} ${controller} -I - -Rejoin One Controller To Another - [Arguments] ${isolated controller} ${controller} - [Documentation] Deletes an IPTable rule, allowing one controller to reconnect to another controller in the cluster. - Modify IPTables ${isolated controller} ${controller} -D - -Modify IPTables - [Arguments] ${isolated controller} ${controller} ${rule type} - [Documentation] Adds a rule, usually inserting or deleting an entry between two controllers. - ${base string} Set Variable sudo /sbin/iptables ${rule type} OUTPUT -p all --source - ${cmd string} Catenate ${base string} ${isolated controller} --destination ${controller} -j DROP - Run Command On Remote System ${isolated controller} ${cmd string} - ${cmd string} Catenate ${base string} ${controller} --destination ${isolated controller} -j DROP - Run Command On Remote System ${isolated controller} ${cmd string} - ${cmd string} Set Variable sudo /sbin/iptables -L -n - ${return string}= Run Command On Remote System ${isolated controller} ${cmd string} - #If inserting rules: - Run Keyword If "${rule type}" == '-I' Should Match Regexp ${return string} [\s\S]*DROP *all *-- *${isolated controller} *${controller}[\s\S]* - Run Keyword If "${rule type}" == '-I' Should Match Regexp ${return string} [\s\S]*DROP *all *-- *${controller} *${isolated controller}[\s\S]* - #If deleting rules: - Run Keyword If "${rule type}" == '-D' Should Match Regexp ${return string} (?![\s\S]*DROP *all *-- *${isolated controller} *${controller}[\s\S]*) - Run Keyword If "${rule type}" == '-D' Should Match Regexp ${return string} (?![\s\S]*DROP *all *-- *${controller} *${isolated controller}[\s\S]*) - -Rejoin All Isolated Controllers - [Arguments] @{controllers} - [Documentation] Wipe all IPTables rules from all controllers, thus rejoining all controllers. - : FOR ${isolated controller} IN @{controllers} - \ Flush IPTables ${isolated controller} - -Flush IPTables - [Arguments] ${isolated controller} - [Documentation] This keyword is generally not called from a test case but supports a complete wipe of all rules on - ... all contollers. - ${cmd string} Set Variable sudo /sbin/iptables -v -F - ${return string}= Run Command On Remote System ${isolated controller} ${cmd string} - Log return: ${return string} - Should Contain ${return string} Flushing chain `INPUT' - Should Contain ${return string} Flushing chain `FORWARD' - Should Contain ${return string} Flushing chain `OUTPUT'