forked from opennode/opennode-tui
/
__init__.py
91 lines (67 loc) · 2.66 KB
/
__init__.py
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import sys
from opennode.cli.actions import oms, console, host, templates, storage, vm, sysresources, network
__context__ = {}
_hardware = None
def smolt_hardware_info():
""" Get hardware information from smolt. """
try:
sys.path.append("/usr/share/smolt/client")
import smolt
except ImportError:
return {'_error': 'smolt is not installed'}
global _hardware
if _hardware is None:
_hardware = smolt.Hardware()
return dict((param, str(getattr(_hardware.host, param)))
for param in dir(_hardware.host)
if not param.startswith('_') and getattr(_hardware.host, param))
def hardware_info():
data = {
'os' : sys.platform,
'defaultRunlevel' : 5,
'bogomips' : None,
'cpuVendor' : 'Unknown',
'cpuModel' : 'Unknown',
'numCpus' : None,
'cpuSpeed' : None,
'systemMemory' : None,
'systemSwap' : None,
'kernelVersion' : 'Unknown',
'language' : None,
'platform' : sys.platform,
'systemVendor' : 'Unknown',
'systemModel' : None,
'formfactor' : None,
'selinux_enabled' : None,
'selinux_enforce' : None,
}
smolt_data = smolt_hardware_info()
if not smolt_data.get('_error', None):
data.update(smolt_data)
return data
# Salt hack: make actions module flat
def _extract_callables(mod, package, level):
import oms
for member in dir(mod):
memberobj = getattr(mod, member)
if not member.startswith('_') and callable(memberobj):
flat_name = '{0}_{1}'.format(mod.__name__[len(package) + 1:].replace('.', '_'), member)
assert not flat_name.startswith('_'), (flat_name, 'from', mod.__name__, package, member)
globals()[flat_name] = memberobj
elif (type(memberobj) is type(oms)):
if not memberobj.__package__ or (not memberobj.__package__.startswith(package)):
# ignore modules that are not part of the same package
continue
_extract_callables(memberobj, package, level + 1)
__all__ = []
def _generate_classes():
_canonical_name = 'opennode.cli.actions'
for name, mod in globals().items():
if type(mod) is not type(oms):
continue
if not hasattr(mod, '__context__'):
mod.__context__ = {}
if mod.__name__.startswith(_canonical_name):
_extract_callables(mod, _canonical_name, 0)
_generate_classes()
__all__ = [oms, console, host, templates, storage, vm, sysresources, network, hardware_info]