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
63
64
65
66
67
68
69
70
71
72
73
74
|
# -*- coding: utf-8 -*-
class Printer:
labels = {
'hostname': 'Hostname',
'arch': 'Architecture',
'os': 'Operating System',
'addresses': 'IPs'
}
sort = ['hostname', 'arch', 'os', 'addresses']
ignore = ['vserver-host']
def __init__(self, data):
self.data = data
def print_addresses(self, label, value):
for ip in value:
print('%s%s/%s (%s)' %
(label, ip['address'], ip['netmask'], ip['interface']))
label = self.empty
def print_vserver(self, label, value):
if value == 'guest':
print('%sguest running on %s' %
(label, self.data['vserver-host']))
else:
print('%s %s' % (self.label, value))
def print_default(self, key, value):
label = ''
if self.length > 0:
label = '%s: ' % self.get_label(key)
label = label.rjust(self.length)
try:
method = getattr(self, 'print_%s' % key)
method(label, value)
except AttributeError:
if isinstance(value, list):
for v in value:
print('%s%s' % (label, v))
label = self.empty
else:
print('%s%s' % (label, value))
def get_label(self, key):
if key in self.labels:
return self.labels[key]
return key
def info(self, key):
# find max lenght for labels
labels = map(self.get_label, self.data.keys())
self.length = max(map(len, labels)) + 3
self.empty = ' ' * self.length
if key is not None:
self.length = 0
self.empty = ''
if key in self.data:
self.print_default(key, self.data[key])
else:
# first the sorted keys
for key in self.sort:
if key in self.data:
self.print_default(key, self.data[key])
# other keys, that are not ignored
for key in [k for k in self.data.keys()
if k not in self.sort
and k not in self.ignore]:
self.print_default(key, self.data[key])
|