1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#!/usr/bin/env python
import os
import re
import subprocess
import uuid
def get_leaders():
leaders = []
for unit in xrange(3):
cmd = ['juju', 'ssh', 'swift-proxy/%d' % (unit), 'sudo', 'crm', 'status']
out = subprocess.check_output(cmd)
key = re.compile("res_swift_eth0_vip.+Started\s(.*) .*")
match = re.search(key, out)
if match:
leaders.append(match.group(1))
leaders = list(set(leaders))
return leaders
def get_status():
status = []
for unit in xrange(3):
cmd = ['juju', 'ssh', 'swift-proxy/%d' % (unit), 'sudo', 'service', 'swift-proxy', 'status']
out = subprocess.check_output(cmd)
key = re.compile("swift-proxy (.*)\r.*")
match = re.search(key, out)
if match:
status.append(match.group(1))
return status
def fix():
unit = 'swift-proxy/0'
cmd = ['juju', 'run', '--unit', unit, 'relation-ids cluster']
out = subprocess.check_output(cmd)
relid = out.strip()
cmd = ['juju', 'run', '--unit', unit, 'relation-get -r %s trigger' % (relid), unit]
out = subprocess.check_output(cmd)
trigger = out.strip()
status = get_status()
leaders = get_leaders()
if len(leaders) != 1:
raise Exception("Inconsistent leaders - %s" % (leaders))
if len(list(set(status))) != 1:
fix()
else:
print "%s" % (list(set(status))[0])
|