summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2022-01-02 02:37:42 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2022-01-02 02:37:42 +0100
commit7049936c02b28fcec544edc9ca555018ff5edf47 (patch)
tree178d1550cbd8a4de5f673ff1a94eeadaeeb55187
parent... (diff)
downloadnspawn-7049936c02b28fcec544edc9ca555018ff5edf47.tar.gz
nspawn-7049936c02b28fcec544edc9ca555018ff5edf47.tar.xz
Add systemd-machined facts.
-rwxr-xr-xfacts.d/main.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/facts.d/main.py b/facts.d/main.py
new file mode 100755
index 0000000..0db37f3
--- /dev/null
+++ b/facts.d/main.py
@@ -0,0 +1,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))