summaryrefslogtreecommitdiff
path: root/facts.d/main.py
blob: 8a46a9db3fc302c8b223dc292705b083e01a2dcc (plain)
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
#!/usr/bin/env python3

import sys

try:
    import dbus
    import yaml
except ImportError:
    sys.exit(1)

bus = dbus.SystemBus()
bus_name = 'org.freedesktop.machine1' # dest
object_path = '/org/freedesktop/machine1'
try:
    machined_proxy = bus.get_object(bus_name=bus_name, object_path=object_path)
except:
    sys.exit(1)
iface = dbus.Interface(machined_proxy, dbus_interface='org.freedesktop.machine1.Manager')


machines = iface.ListMachines()
machine_names = []
machines_info = {}
for (machine_name, *_) in machines:
    machine = iface.GetMachine(machine_name)
    pp = bus.get_object(bus_name='org.freedesktop.machine1', object_path=machine)
    ii = dbus.Interface(pp, dbus_interface='org.freedesktop.DBus.Properties')
    out_dict = {}
    for key, value in ii.GetAll('org.freedesktop.machine1.Machine').items():
        # see help(dbus.types)
        t = type(value)
        if t == dbus.ByteArray:
            raise NotImplementedError('Byte array')
        elif t == dbus.Double:
            v = float(value)
        elif t == dbus.Boolean:
            v = bool(value)
        elif t in [ dbus.Byte, dbus.Int16, dbus.Int32, dbus.Int64, dbus.UInt16, dbus.UInt32, dbus.UInt64 ]:
            v = int(value)
        elif t in [ dbus.ObjectPath, dbus.Signature ]:
            # string likes
            v = str(value)
        elif t ==  dbus.Dictionary:
            # dict like
            raise NotImplementedError('Dictionary')
        elif t == dbus.Array:
            if value.signature == dbus.Signature('y'):
                v = bytes(int(x) for x in value)
            elif value.signature == dbus.Signature('i'):
                v = [int(x) for x in value]
            else:
                print(repr(value))
                print(repr(value.signature))
                raise NotImplementedError('Array')
        # case dbus.UnixFd:
        #     raise NotImplementedError()
        elif t == dbus.String:
            v = str(value)
        elif t ==  dbus.Struct:
            # tuple like
            raise NotImplementedError('Struct')
        out_dict[str(key)] = v
    machine_names.append(str(machine_name))
    machines_info[str(machine_name)] = out_dict

out = {
    'machined-machines': machine_names,
    'machined-info': machines_info,
}

print(yaml.dump(out))