blob: 0db37f3607507500cd12e4ad3bae83da3a9d695c (
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
|
#!/usr/bin/env python3
import dbus
import yaml
bus = dbus.SystemBus()
bus_name = 'org.freedesktop.machine1' # dest
object_path = '/org/freedesktop/machine1'
machined_proxy = bus.get_object(bus_name=bus_name, object_path=object_path)
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)
match type(value):
case dbus.ByteArray:
raise NotImplementedError('Byte array')
case dbus.Double:
v = float(value)
case dbus.Boolean:
v = bool(value)
case dbus.Byte | dbus.Int16 | dbus.Int32 | dbus.Int64 | dbus.UInt16 | dbus.UInt32 | dbus.UInt64:
v = int(value)
case dbus.ObjectPath | dbus.Signature:
# string likes
v = str(value)
case dbus.Dictionary:
# dict like
raise NotImplementedError('Dictionary')
case dbus.Array:
match value.signature:
case dbus.Signature('y'):
v = bytes(int(x) for x in value)
case dbus.Signature('i'):
v = [int(x) for x in value]
case _:
print(repr(value))
print(repr(value.signature))
raise NotImplementedError('Array')
# case dbus.UnixFd:
# raise NotImplementedError()
case dbus.String:
v = str(value)
case 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))
|