]> git.pld-linux.org Git - packages/xen.git/blame - xen-init-list
- rel 1
[packages/xen.git] / xen-init-list
CommitLineData
6f09bc96 1#!/usr/bin/python2
e9dbc551
JR
2
3from __future__ import print_function
4
5import json
6import re
7import sys
8import subprocess
9
10
11class SXPParser(object):
12 tokenizer_rules = r""" (?P<open> \( ) | (?P<close> \) ) | (?P<whitespace> \s+ ) | [^()^\s]+ """
13 tokenizer_re = re.compile(tokenizer_rules, re.X)
14
15 def __init__(self):
16 self.stack = []
17 self.data = []
18
19 def __call__(self, input):
20 for match in self.tokenizer_re.finditer(input):
21 if match.group('open'):
22 self.stack.append([])
23 elif match.group('close'):
24 top = self.stack.pop()
25 if self.stack:
26 self.stack[-1].append(top)
27 else:
28 self.data.append(top)
29 elif match.group('whitespace'):
30 pass
31 else:
32 if self.stack:
33 self.stack[-1].append(match.group())
34 return self.data
35
36
37class Data(object):
38 def __call__(self, out):
39 for domid, info in sorted(self.data.iteritems(), reverse=True):
40 print(str(domid), *info)
41
42
43class DataJSON(Data):
44 def __init__(self, p):
45 s = json.loads(p)
46 self.data = d = {}
47 for i in s:
48 domid = i['domid']
49 name = i['config']['c_info']['name']
50 d[domid] = (name, )
51
52
53class DataSXP(Data):
54 def __init__(self, p):
55 s = SXPParser()(p)
56 self.data = d = {}
57 for i in s:
58 if i and i[0] == 'domain':
59 try:
60 data = dict(j for j in i if len(j) == 2)
61 domid = int(data['domid'])
62 name = data['name']
63 if domid == 0:
64 continue
65 d[domid] = (name, )
66 except (KeyError, ValueError) as e:
67 pass
68
69
70if __name__ == '__main__':
6f09bc96 71 p = subprocess.check_output(('/usr/libexec/xen/bin/xen-toolstack', 'list', '-l'))
e9dbc551
JR
72 if p[0] == '(':
73 d = DataSXP(p)
74 else:
75 d = DataJSON(p)
76 d(sys.stdout)
77
This page took 0.028802 seconds and 4 git commands to generate.