Use correct pcs resource name for rabbitmq-server resource

1) introduce additional pacemaker helper to get correct resource
name for multi-state resources
2) alter strength tests to use the correct name

Change-Id: Ibe97e2d7cadf475354e1ed77b41deff6faf68151
Closes-bug: #1551708
This commit is contained in:
Vladimir Kuklin 2016-03-03 17:46:07 +03:00 committed by Alexey Stepanov
parent cd9c3d2913
commit 34d1ac7fec
3 changed files with 74 additions and 29 deletions

View File

@ -13,7 +13,7 @@
# under the License.
from xml.etree import ElementTree
from fuelweb_test.helpers.utils import run_on_remote_get_results
from fuelweb_test.helpers.ssh_manager import SSHManager
def get_pacemaker_nodes_attributes(cibadmin_status_xml):
@ -98,11 +98,32 @@ def get_pcs_nodes(pcs_status_xml):
return nodes
def parse_pcs_status_xml(remote):
def parse_pcs_status_xml(remote_ip):
"""Parse 'pcs status xml'. <Nodes> section
:param remote: SSHClient instance
:param remote_ip: remote IP address
:return: nested dictionary with node-fqdn and attribute name as keys
"""
pcs_status_dict = run_on_remote_get_results(
remote, 'pcs status xml')['stdout_str']
pcs_status_dict = SSHManager().execute_on_remote(
remote_ip, 'pcs status xml')['stdout_str']
return pcs_status_dict
def get_pacemaker_resource_name(remote_ip, resource_name):
""" Parse 'cibadmin -Q --scope resources' and check whether the resource
is multistate. Return parent resource name if it is, resource name
otherwise
:param remote_ip: remote IP address
:param resource_name: resource name string
:return: string with proper resource name
"""
cib = SSHManager().execute_on_remote(
remote_ip, 'cibadmin -Q --scope resources')['stdout_str']
root = ElementTree.fromstring(cib)
resource_parent = root.find(
".//primitive[@id='{0}']/..".format(resource_name))
if resource_parent.tag in ['master', 'clone']:
return resource_parent.attrib['id']
else:
return resource_name

View File

@ -39,6 +39,13 @@ class TestBasic(object):
self.__env = None
self.__current_log_step = 0
self.__test_program = None
self.__fuel_constants = {
'rabbit_pcs_name': 'p_rabbitmq-server'
}
@property
def fuel_constants(self):
return self.__fuel_constants
@property
def ssh_manager(self):

View File

@ -38,6 +38,7 @@ from fuelweb_test.helpers.checkers import check_public_ping
from fuelweb_test.helpers.utils import get_file_size
from fuelweb_test.helpers.utils import RunLimit
from fuelweb_test.helpers.utils import TimeStat
from fuelweb_test.helpers.pacemaker import get_pacemaker_resource_name
from fuelweb_test.helpers.utils import run_on_remote
from fuelweb_test.settings import DEPLOYMENT_MODE
from fuelweb_test.settings import DNS
@ -1353,6 +1354,9 @@ class TestHaFailoverBase(TestBasic):
# get rabbit slaves
rabbit_slaves = self.fuel_web.get_rabbit_slaves_node(p_d_ctrl.name)
rabbit_resource_name = get_pacemaker_resource_name(
self.fuel_web.get_node_ip_by_devops_name(p_d_ctrl.name),
self.fuel_constants['rabbit_pcs_name'])
assert_true(rabbit_slaves,
'Can not find rabbit slaves. On count {0} '
'current result is {1}'.format(count, rabbit_slaves))
@ -1375,32 +1379,45 @@ class TestHaFailoverBase(TestBasic):
logger.info('Slaves rabbit fqdn {0} '
'on count {1}'.format(slaves_rabbit_fqdn, count))
with self.fuel_web.get_ssh_for_node(
master_rabbit.name) as remote_master_rabbit:
cmd = ('pcs constraint delete '
'location-p_rabbitmq-server 2>&1 >/dev/null| true')
remote_master_rabbit.execute(cmd)
self.show_step(5, details='Run count: {0}'.format(count))
# Move resource to rabbit slave
cmd_move = ('pcs constraint location p_rabbitmq-server '
'rule role=master score=-INFINITY \#uname '
'ne {0}').format(slaves_rabbit_fqdn[0])
result = remote_master_rabbit.execute(cmd_move)
assert_equal(
result['exit_code'], 0,
'Fail to move p_rabbitmq-server with {0} on '
'count {1}'.format(result, count))
master_rabbit_ip = self.fuel_web.get_node_ip_by_devops_name(
master_rabbit.name)
cmd = (
'pcs constraint delete '
'location-{0} 2>&1 >/dev/null| true'.format(
rabbit_resource_name))
self.ssh_manager.execute_on_remote(master_rabbit_ip, cmd)
self.show_step(5, details='Run count: {0}'.format(count))
# Move resource to rabbit slave
cmd_move = ('pcs constraint location {0} '
'rule role=master score=-INFINITY \#uname '
'ne {1}').format(rabbit_resource_name,
slaves_rabbit_fqdn[0])
result = self.ssh_manager.execute_on_remote(
master_rabbit_ip, cmd_move, raise_on_assert=False)
assert_equal(
result['exit_code'], 0,
'Fail to move p_rabbitmq-server with {0} on '
'count {1}'.format(result, count))
# Clear all
self.show_step(6, details='Run count: {0}'.format(count))
cmd_clear = ('pcs constraint delete '
'location-{0}').format(rabbit_resource_name)
result = self.ssh_manager.execute_on_remote(
master_rabbit_ip, cmd_clear, raise_on_assert=False)
assert_equal(
result['exit_code'], 0,
'Fail to delete pcs constraint using {0} on '
'count {1}'.format(cmd_clear, count))
# Clear all
self.show_step(6, details='Run count: {0}'.format(count))
cmd_clear = ('pcs constraint delete '
'location-p_rabbitmq-server')
result = remote_master_rabbit.execute(cmd_clear)
assert_equal(
result['exit_code'], 0,
'Fail to delete pcs constraint using {0} on '
'count {1}'.format(cmd_clear, count))
# check ha
self.show_step(7)
self.fuel_web.assert_ha_services_ready(cluster_id, timeout=700)