onos-gen-partitions
1.48 KB
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
55
56
57
58
59
60
61
62
#!/usr/bin/env python
"""
Generate the partitions json file from the $OC* environment variables
Usage: onos-gen-partitions [output file]
If output file is not provided, the json is written to stdout.
"""
from os import environ
from collections import deque, OrderedDict
import re
import json
import sys
import random
import string
convert = lambda text: int(text) if text.isdigit() else text.lower()
alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
def get_OC_vars():
vars = []
for var in environ:
if re.match(r"OC[0-9]+", var):
vars.append(var)
return sorted(vars, key=alphanum_key)
def get_nodes(vars, port=9876):
node = lambda k: { 'id': k, 'ip': k, 'port': port }
return [ node(environ[v]) for v in vars ]
def generate_permutations(nodes, k):
l = deque(nodes)
perms = []
for i in range(1, len(nodes)+1):
part = {
'name': 'p%d' % i,
'members': list(l)[:k]
}
perms.append(part)
l.rotate(-1)
return perms
if __name__ == '__main__':
vars = get_OC_vars()
nodes = get_nodes(vars)
partitions = generate_permutations([v.get('id') for v in nodes], 3)
name = 0
for node in nodes:
name = name ^ node['ip']
data = {
'name': name,
'nodes': nodes,
'partitions': partitions
}
output = json.dumps(data, indent=4)
if len(sys.argv) == 2:
filename = sys.argv[1]
with open(filename, 'w') as f:
f.write(output)
else:
print output