From e0e5066d5422406779656ef448775851b30eda53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Sun, 2 Jan 2022 02:37:42 +0100 Subject: Add systemd-machined facts. --- modules/nspawn/facts.d/main.py | 64 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100755 modules/nspawn/facts.d/main.py diff --git a/modules/nspawn/facts.d/main.py b/modules/nspawn/facts.d/main.py new file mode 100755 index 0000000..0db37f3 --- /dev/null +++ b/modules/nspawn/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)) -- cgit v1.2.3