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:
parent
36f4547fb1
commit
932c3b31bb
3 changed files with 53 additions and 0 deletions
8
users/wpcarro/tools/systemd-shell/default.nix
Normal file
8
users/wpcarro/tools/systemd-shell/default.nix
Normal file
|
@ -0,0 +1,8 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
pkgs.python310Packages.buildPythonApplication {
|
||||
pname = "systemd-shell";
|
||||
version = "0.0.1";
|
||||
src = ./.;
|
||||
doCheck = false;
|
||||
}
|
9
users/wpcarro/tools/systemd-shell/setup.py
Normal file
9
users/wpcarro/tools/systemd-shell/setup.py
Normal 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"],
|
||||
)
|
36
users/wpcarro/tools/systemd-shell/systemd-shell
Normal file
36
users/wpcarro/tools/systemd-shell/systemd-shell
Normal 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)
|
Loading…
Reference in a new issue