From 932c3b31bbb16b5d52d34fd65c51d2bd59f94762 Mon Sep 17 00:00:00 2001 From: William Carroll Date: Fri, 18 Nov 2022 18:08:47 -0800 Subject: feat(wpcarro/tools): Support systemd-shell Drop into a new shell environment with the same variables defined in a systemd unit file (for debugging purposes). Change-Id: Iaf513809b524f3f3e845b512450da71694bb7c7f Reviewed-on: https://cl.tvl.fyi/c/depot/+/7308 Autosubmit: wpcarro Reviewed-by: wpcarro Tested-by: BuildkiteCI --- users/wpcarro/tools/systemd-shell/default.nix | 8 ++++++ users/wpcarro/tools/systemd-shell/setup.py | 9 +++++++ users/wpcarro/tools/systemd-shell/systemd-shell | 36 +++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 users/wpcarro/tools/systemd-shell/default.nix create mode 100644 users/wpcarro/tools/systemd-shell/setup.py create mode 100644 users/wpcarro/tools/systemd-shell/systemd-shell (limited to 'users/wpcarro/tools') diff --git a/users/wpcarro/tools/systemd-shell/default.nix b/users/wpcarro/tools/systemd-shell/default.nix new file mode 100644 index 000000000000..eace76b7087b --- /dev/null +++ b/users/wpcarro/tools/systemd-shell/default.nix @@ -0,0 +1,8 @@ +{ pkgs, ... }: + +pkgs.python310Packages.buildPythonApplication { + pname = "systemd-shell"; + version = "0.0.1"; + src = ./.; + doCheck = false; +} diff --git a/users/wpcarro/tools/systemd-shell/setup.py b/users/wpcarro/tools/systemd-shell/setup.py new file mode 100644 index 000000000000..f45e058e672e --- /dev/null +++ b/users/wpcarro/tools/systemd-shell/setup.py @@ -0,0 +1,9 @@ +from setuptools import setup + +setup( + name="systemd-shell", + version="0.0.1", + author="William Carroll", + author_email="wpcarro@gmail.com", + scripts=["systemd-shell"], +) diff --git a/users/wpcarro/tools/systemd-shell/systemd-shell b/users/wpcarro/tools/systemd-shell/systemd-shell new file mode 100644 index 000000000000..646d59143afd --- /dev/null +++ b/users/wpcarro/tools/systemd-shell/systemd-shell @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 + +# Drop into a new shell environment with the same variables defined in a systemd +# unit file (for debugging purposes). +# +# USAGE: +# $ systemd-shell -u buildkite-agent-foundation-1.service + +import argparse +import os + +def parse_env(entry): + x = entry[12:].split("=", 1) + return x[0].removeprefix("\"").removesuffix("\""), x[1].removeprefix("\"").removesuffix("\"") + +def run(unit): + envfile = [] + print("--- Environment ---") + for line in open(f"/etc/systemd/system/{unit}").readlines(): + if line.startswith("Environment="): + key, val = parse_env(line[:-1]) + print(f"export {key}={val}") + envfile.append(f"{key}={val}") + else: + continue + print() + + env = " ".join(envfile) + print("--- Command ---") + os.system(f"/usr/bin/env {env} /bin/sh") + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("-u", "--unit", type=str, required=True) + args = parser.parse_args() + run(args.unit) -- cgit 1.4.1