Blob Blame History Raw
#!/usr/bin/python3
"""
Configure chrony to set system time from the network

Configures `chrony` to set the system time from the given `timeservers`.

Modifies /etc/chrony.conf, removing all "server" or "pool" lines and adding
a "server" line for each server listed in `timeservers`.
"""

import json
import sys
import re

SCHEMA = """
"additionalProperties": false,
"required": ["timeservers"],
"properties": {
  "timeservers": {
    "type": "array",
    "items": { "type": "string" },
    "description": "Array of NTP server addresses"
  }
}
"""
DELETE_LINE_REGEX = re.compile(r"(server|pool) ")


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

    with open(f"{tree}/etc/chrony.conf") as f:
        chrony_conf = f.read()

    # split to lines and remove ones starting with server and pool
    lines = chrony_conf.split('\n')
    lines = [line for line in lines if not DELETE_LINE_REGEX.match(line)]

    # prepend new server lines
    newlines = [f"server {server} iburst" for server in timeservers]
    newlines += lines

    new_chrony_conf = "\n".join(newlines)

    with open(f"{tree}/etc/chrony.conf", "w") as f:
        f.write(new_chrony_conf)

    return 0


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