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 <wpcarro@gmail.com>
Reviewed-by: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
This commit is contained in:
William Carroll 2022-11-18 18:08:47 -08:00 committed by clbot
parent 36f4547fb1
commit 932c3b31bb
3 changed files with 53 additions and 0 deletions

View file

@ -0,0 +1,8 @@
{ pkgs, ... }:
pkgs.python310Packages.buildPythonApplication {
pname = "systemd-shell";
version = "0.0.1";
src = ./.;
doCheck = false;
}

View file

@ -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"],
)

View file

@ -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)