James Kuszmaul | 55d9fc7 | 2020-05-10 18:58:08 -0700 | [diff] [blame] | 1 | #!/usr/bin/python3 |
| 2 | |
| 3 | import argparse |
James Kuszmaul | 55d9fc7 | 2020-05-10 18:58:08 -0700 | [diff] [blame] | 4 | import json |
| 5 | import sys |
Philipp Schrader | 75f1c26 | 2024-04-03 11:32:58 -0700 | [diff] [blame^] | 6 | from pathlib import Path |
James Kuszmaul | 55d9fc7 | 2020-05-10 18:58:08 -0700 | [diff] [blame] | 7 | |
| 8 | import jinja2 |
| 9 | |
| 10 | |
| 11 | def main(): |
Ravago Jones | 5127ccc | 2022-07-31 16:32:45 -0700 | [diff] [blame] | 12 | # Note: this is a pretty transparent interface to jinja2--there's no reason |
| 13 | # this script couldn't be renamed and then used to generate any config from |
| 14 | # a template. |
| 15 | parser = argparse.ArgumentParser( |
| 16 | description="Generates the raspberry pi configs from a template.") |
Philipp Schrader | 75f1c26 | 2024-04-03 11:32:58 -0700 | [diff] [blame^] | 17 | parser.add_argument("template", |
| 18 | type=Path, |
| 19 | help="File to use for template.") |
Ravago Jones | 5127ccc | 2022-07-31 16:32:45 -0700 | [diff] [blame] | 20 | parser.add_argument( |
| 21 | "replacements", |
| 22 | type=json.loads, |
| 23 | help="Dictionary of parameters to replace in the template.") |
James Kuszmaul | ba43b06 | 2024-01-14 17:29:21 -0800 | [diff] [blame] | 24 | parser.add_argument( |
Philipp Schrader | 75f1c26 | 2024-04-03 11:32:58 -0700 | [diff] [blame^] | 25 | "--include_dir", |
| 26 | action="append", |
| 27 | type=Path, |
| 28 | default=[], |
| 29 | help="One or more search directories for {% include %} blocks.", |
| 30 | ) |
| 31 | parser.add_argument("output", type=Path, help="Output file to create.") |
Ravago Jones | 5127ccc | 2022-07-31 16:32:45 -0700 | [diff] [blame] | 32 | args = parser.parse_args(sys.argv[1:]) |
James Kuszmaul | 55d9fc7 | 2020-05-10 18:58:08 -0700 | [diff] [blame] | 33 | |
Philipp Schrader | 75f1c26 | 2024-04-03 11:32:58 -0700 | [diff] [blame^] | 34 | env = jinja2.Environment(loader=jinja2.FileSystemLoader(args.include_dir)) |
| 35 | template = env.from_string(args.template.read_text()) |
James Kuszmaul | 55d9fc7 | 2020-05-10 18:58:08 -0700 | [diff] [blame] | 36 | |
Philipp Schrader | 75f1c26 | 2024-04-03 11:32:58 -0700 | [diff] [blame^] | 37 | args.output.write_text(template.render(args.replacements)) |
Ravago Jones | 5127ccc | 2022-07-31 16:32:45 -0700 | [diff] [blame] | 38 | |
James Kuszmaul | 55d9fc7 | 2020-05-10 18:58:08 -0700 | [diff] [blame] | 39 | |
| 40 | if __name__ == '__main__': |
Ravago Jones | 5127ccc | 2022-07-31 16:32:45 -0700 | [diff] [blame] | 41 | main() |