Blob Blame History Raw
#!/usr/bin/python3
"""
Enable osbuild Boot Test service

Creates a Boot Test service that executes the given `script` (sending output to
/dev/vport0p1) then immediately shuts down the system.

Creates `/etc/systemd/system/osbuild-test.service`, and a symlink to it in
`/etc/systemd/system/multi-user.target.wants/`.
"""


import json
import os
import sys

SCHEMA = """
"additionalProperties": false,
"required": ["script"],
"properties": {
  "script": {
    "type": "string",
    "description": "Full path to a script that verifies successful bootup"
  }
}
"""

def main(tree, options):
    script = options["script"]

    unit = f"""
[Unit]
Description=Boot Test
Wants=dev-vport0p1.device
After=dev-vport0p1.device

[Service]
StandardOutput=file:/dev/vport0p1
ExecStart={script}
ExecStopPost=/usr/bin/systemctl poweroff
"""
    with open(f"{tree}/etc/systemd/system/osbuild-test.service", "w") as f:
        f.write(unit)

    os.symlink("../osbuild-test.service",
               f"{tree}/etc/systemd/system/multi-user.target.wants/osbuild-test.service")

    return 0


if __name__ == '__main__':
    args = json.load(sys.stdin)
    r = main(args["tree"], args["options"])
    sys.exit(r)