Browse Source

TEEMS launch script

Ian Goldberg 1 year ago
parent
commit
841b4fc29b
1 changed files with 74 additions and 0 deletions
  1. 74 0
      App/launch

+ 74 - 0
App/launch

@@ -0,0 +1,74 @@
+#!/usr/bin/env python3
+
+import argparse
+import os
+import shlex
+import subprocess
+import sys
+import threading
+import yaml
+sys.path.insert(0, os.getcwd())
+import mkconfig
+
+# The default manifest file
+MANIFEST = "manifest.yaml"
+
+# The default pubkeys file
+PUBKEYS = "pubkeys.yaml"
+
+# The TEEMS binary
+TEEMS = "./teems"
+
+def launch(node, manifest, config):
+    manifestdata = manifest[node]
+    cmdline = ''
+    if 'launchprefix' in manifestdata:
+        cmdline = manifestdata['launchprefix'] + ' '
+    cmdline += TEEMS + " %s %s" % (manifestdata['sprvfile'], node)
+    if 'args' in manifestdata:
+        cmdline += ' ' + manifestdata['args']
+    proc = subprocess.Popen(shlex.split(cmdline), stdin=subprocess.PIPE,
+        stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=0)
+    proc.stdin.write(config.encode('utf-8'))
+    while True:
+        line = proc.stdout.readline()
+        if not line:
+            break
+        print(node + ": " + line.decode('utf-8'), end='')
+
+
+if __name__ == "__main__":
+    aparse = argparse.ArgumentParser(
+        description='Launch TEEMS nodes'
+    )
+    aparse.add_argument('-m', default=MANIFEST,
+        help='manifest.yaml file')
+    aparse.add_argument('-p', default=PUBKEYS,
+        help='pubkeys.yaml file')
+    aparse.add_argument('node', nargs='*', help='nodes to include')
+    args = aparse.parse_args()
+
+    with open(args.m) as mf:
+        manifest = yaml.safe_load(mf)
+
+    config = mkconfig.create_json(args.m, args.p, args.node)
+    # There must not be any newlines in the config json string
+    if "\n" in config:
+        print("Error: config.json must not contain embedded newlines")
+        sys.exit(1)
+    # Now add a trailing newline
+    config += "\n"
+
+    nodelist = args.node
+    if nodelist is None or len(nodelist) == 0:
+        nodelist = manifest.keys()
+
+    threadlist = []
+    for node in nodelist:
+        thread = threading.Thread(target=launch,
+            args=(node, manifest, config))
+        thread.start()
+        threadlist.append(thread)
+
+    for thread in threadlist:
+        thread.join()