bootstrap/template.py: add cli to render templates
authorJoe Guo <joeg@catalyst.net.nz>
Sun, 17 Feb 2019 23:31:28 +0000 (12:31 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 21 Feb 2019 03:09:20 +0000 (04:09 +0100)
- bootstrap for each dist
- Dockerfile for each dist
- Vagrantfile all in one

Signed-off-by: Joe Guo <joeg@catalyst.net.nz>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
bootstrap/template.py [new file with mode: 0755]

diff --git a/bootstrap/template.py b/bootstrap/template.py
new file mode 100755 (executable)
index 0000000..48c008c
--- /dev/null
@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+
+# Copyright (C) Catalyst.Net Ltd 2019
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""
+Manage dependencies and bootstrap environments for Samba.
+
+CLI script to render bootstrap.sh/Dockerfile/Vagrantfile.
+
+Author: Joe Guo <joeg@catalyst.net.nz>
+"""
+
+import io
+import os
+import logging
+import argparse
+from config import DISTS, VAGRANTFILE, OUT
+
+logging.basicConfig(level='INFO')
+log = logging.getLogger(__file__)
+
+
+def render(dists):
+    """Render files for all dists"""
+    for dist, config in dists.items():
+        home = config['home']
+        os.makedirs(home, exist_ok=True)
+        for key in ['packages.yml', 'bootstrap.sh', 'Dockerfile']:
+            path = os.path.join(home, key)
+            log.info('%s: render "%s" to %s', dist, key, path)
+            with io.open(path, mode='wt', encoding='utf8') as fp:
+                fp.write(config[key])
+
+        key = 'Vagrantfile'
+        path = os.path.join(OUT, key)
+        log.info('%s: render "%s" to %s', dist, key, path)
+        with io.open(path, mode='wt', encoding='utf8') as fp:
+            fp.write(VAGRANTFILE)
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+        description=('Render templates with samba dependencies '
+                     'to bootstrap multiple distributions.'))
+
+    parser.add_argument(
+        '-r', '--render', action='store_true', help='Render templates')
+
+    args = parser.parse_args()
+
+    if args.render:
+        render(DISTS)
+    else:
+        parser.print_help()
+
+
+if __name__ == '__main__':
+    main()