~openstack-charm-testers/+junk/swift-rings

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])