123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #!/usr/bin/env python3
- # Given a manifest.yaml file, a pubkeys.yaml file, and (optionally) a
- # list of nodes to include, generate the config.json file to give to
- # each of the nodes. If the list of nodes is missing, include all nodes
- # in the manifest.yaml file. It is an error to include a node that is
- # missing from either the manifest.yaml or the pubkeys.yaml files.
- # Usage: mkconfig [-m manifest.yaml] [-p pubkeys.yaml] [-n node1 node2...]
- import argparse
- import json
- import yaml
- # The default manifest file
- MANIFEST = "manifest.yaml"
- # The default pubkeys file
- PUBKEYS = "pubkeys.yaml"
- def create_json(manifestfile, pubkeysfile, nodelist, params_override):
- """Given a manifest.yaml file, a pubkeys.yaml file, and (optionally) a
- list of nodes to include and a dictionary of parameter settings to
- override, generate the config.json file to give to each of the
- nodes. If the list of nodes is missing, include all nodes in the
- manifest.yaml file. It is an error to include a node that is
- missing from either the manifest.yaml or the pubkeys.yaml files."""
- with open(manifestfile) as mf:
- manifest = yaml.safe_load(mf)
- with open(pubkeysfile) as pf:
- pubkeys = yaml.safe_load(pf)
- if nodelist is None or len(nodelist) == 0:
- nodelist = manifest.keys()
- config = {}
- if "params" in manifest:
- config['params'] = manifest['params']
- for ov in params_override:
- if params_override[ov] is not None:
- config['params'][ov] = params_override[ov]
- config['nodes'] = []
- for node in nodelist:
- if node == "params":
- continue
- nodeconf = {}
- m = manifest[node]
- nodeconf['name'] = node
- nodeconf['pubkey'] = pubkeys[node]
- nodeconf['listen'] = m['listen']
- # Optional fields
- for f in ['clisten', 'slisten', 'weight', 'roles']:
- if f in m:
- nodeconf[f] = m[f]
- config['nodes'].append(nodeconf)
- return json.dumps(config)
- if __name__ == "__main__":
- aparse = argparse.ArgumentParser(
- description='Create a TEEMS config.json file from a manifest and a pubkeys file'
- )
- aparse.add_argument('-m', default=MANIFEST,
- help='manifest.yaml file')
- aparse.add_argument('-p', default=PUBKEYS,
- help='pubkeys.yaml file')
- aparse.add_argument('-z', default=None,
- help='override message size')
- aparse.add_argument('-u', default=None,
- help='override max number of users')
- aparse.add_argument('-B', default=None,
- help='override max number of outgoing token channel messages per user per epoch')
- aparse.add_argument('-b', default=None,
- help='override max number of incoming token channel messages per user per epoch')
- aparse.add_argument('-C', default=None,
- help='override max number of outgoing ID channel messages per user per epoch')
- aparse.add_argument('-c', default=None,
- help='override max number of incoming ID channel messages per user per epoch')
- aparse.add_argument('-n', nargs='*', help='nodes to include')
- args = aparse.parse_args()
- params_overrides = {
- 'msg_size': args.z,
- 'user_count': args.u,
- 'token_out': args.B,
- 'token_in': args.b,
- 'id_out': args.C,
- 'id_in': args.c,
- }
- json = create_json(args.m, args.p, args.n, params_overrides)
- if json is not None:
- print(json)
|