diff --git a/main.py b/main.py index 9cdc926..cc8f4af 100644 --- a/main.py +++ b/main.py @@ -8,23 +8,22 @@ class Plugin: return os.getuid() def _systemd_status(self, service = "tailscaled.service"): - result = subprocess.run(["/bin/sh", "-c", "systemctl status tailscaled.service | grep active"]) - return result.stdout.parse().split(": ")[1] + result = subprocess.run(["/bin/sh", "-c", "systemctl status tailscaled.service | grep active"], stdout=subprocess.PIPE) + return result.stdout.decode("utf-8").split(": ")[1] async def install_state(self, *args): - sysext = subprocess.run(["/usr/bin/systemd-sysext", "list", "--json=short"]) - sysexts = json.load(sysext.stdout) - for hier in sysexts: - if hier.hierarchy != "/usr": + sysext = subprocess.run(["/usr/bin/systemd-sysext", "list", "--json=short"], stdout=subprocess.PIPE) + sysexts = json.load(sysext.stdout.decode("utf-8")) + + if sysexts.len() == 0: + return "not installed" + + for ext in sysexts: + if ext.name != "tailscale": continue - if hier.extensions == "none": - if pathlib.Path("/etc/extensions/tailscale").exists(): - return "installed" - - if "tailscale" in hier.extensions: - return self._systemd_status() - + return self._systemd_status() + return "impossible state" # Asyncio-compatible long-running code, executed in a task when the plugin is loaded