3
import utils.mojo_utils as mojo_utils
4
import utils.mojo_os_utils as mojo_os_utils
12
def rabbit_unit_status(unit):
13
cmd = 'rabbitmqctl -q cluster_status'
14
output = mojo_utils.remote_run(unit, remote_cmd=cmd)[0]
15
output = output.replace('\n', '')
16
matchObj = re.search(r'running_nodes,(.*)}, {partitions', output)
18
for machine in ast.literal_eval(matchObj.group(1)):
19
machine_numbers.append(int(machine.split('-')[-1]))
20
return machine_numbers
24
juju_units = mojo_utils.get_juju_units(service='rabbitmq-server')
25
machine_numbers = get_machine_numbers('rabbitmq-server')
26
for unit in juju_units:
27
units = rabbit_unit_status(unit)
29
if machine_numbers == units:
30
logging.info('Rabbit status on %s look good' % (unit))
32
msg = 'Mismatch on rabbit status for on unit {}'.format(unit)
36
def unit_crm_online(unit):
37
output = mojo_utils.remote_run(unit, remote_cmd='crm_mon -X')
39
tree = xml.dom.minidom.parseString(xml_out)
40
itemlist = tree.getElementsByTagName('node')
43
if 'online' in s.attributes.keys() \
44
and s.attributes['online'].value == 'true':
45
online_units.append(int(s.attributes['name'].value.split('-')[-1]))
50
def get_machine_numbers(service):
51
juju_units = mojo_utils.get_juju_units(service=service)
53
for unit in juju_units:
54
machine_numbers.append(mojo_utils.convert_unit_to_machinename(unit))
55
machine_numbers.sort()
56
return machine_numbers
59
def check_crm_status(service):
60
juju_units = mojo_utils.get_juju_units(service=service)
63
cmd = 'which crm_mon || echo "Not Found"'
64
output = mojo_utils.remote_run(juju_units[0], remote_cmd=cmd)
65
if output[0].rstrip() == "Not Found":
67
for unit in juju_units:
68
mach_nums = get_machine_numbers(service)
69
crm_online = unit_crm_online(unit)
70
if mach_nums == crm_online:
71
logging.info('Service %s status on %s look good' % (service, unit))
73
logging.info('%s != %s' % (str(mach_nums), str(crm_online)))
74
msg = ('Mismatch on crm status for service {} '
75
'on unit {}'.format(service, unit))
79
def check_cluster_status(service):
80
if service == 'rabbitmq-service':
83
check_crm_status(service)
87
logging.basicConfig(level=logging.INFO)
88
parser = argparse.ArgumentParser()
89
parser.add_argument("term_method", default='juju', nargs='?')
90
skip_services = ['neutron-gateway', 'mongodb', 'heat', 'rabbitmq-server']
91
princ_services = mojo_utils.get_principle_services()
92
services = [item for item in princ_services if item not in skip_services]
94
doomed_service = services.pop(0)
95
mojo_os_utils.delete_juju_leader(doomed_service)
96
mojo_utils.juju_check_hooks_complete()
97
mojo_utils.juju_status_check_and_wait()
98
check_cluster_status(doomed_service)
99
mojo_utils.add_unit(doomed_service, unit_num=1)
100
mojo_utils.juju_status_check_and_wait()
101
mojo_utils.juju_check_hooks_complete()
102
check_crm_status(doomed_service)
105
if __name__ == "__main__":
106
sys.exit(main(sys.argv))