#! /usr/bin/env python2
import json
import argparse

def gen_config(args):
    confobj = {}
    hostip = args.host
    machines = [{"ip":hostip, "basedir":args.defbase, "user":args.defuser}]
    nodemgr_nodes = [{
                "ip": hostip, 
                "nodetype" : "both",
                "storage_datadirs": "/data1/storage_datadir",
                "storage_logdirs": "/data1/storage_logdir",
                "storage_waldirs": "/data1/storage_waldir"
                }]
    clustermgr_nodes = [{"ip": hostip}]
    meta_nodes = [{"ip":hostip}]
    clusters = []
    clusters.append({
        "name": "single_node_cluster",
        "ha_mode": "no_rep",
        "comp": {
            "nodes": [{
                "ip": hostip,
                "user": args.user,
                "password": args.password,
                "port": args.port,
                "mysql_port": args.mysql_port
                }]},
        "data": [
            {
                "nodes": [{
                    "ip": hostip,
                    "innodb_buffer_pool_size": "%dMB" % args.innodbsize
                    }]
            }]
        })
    confobj = {
            "machines": machines,
            "meta": {
                    "ha_mode": "no_rep",
                    "nodes": meta_nodes
                },
            "cluster_manager": { "nodes": clustermgr_nodes},
            "node_manager": {"nodes": nodemgr_nodes},
            "clusters": clusters
            }
    outf = open(args.output, 'w')
    json.dump(confobj, outf, indent=4)

if  __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Specify the arguments.')
    parser.add_argument('--host', type=str, help="The host ip", required=True)
    parser.add_argument('--user', type=str, help="computing node user name", required=True)
    parser.add_argument('--password', type=str, help="computing node password", required=True)
    parser.add_argument('--innodbsize', type=int, help="innodb size for storage node", default=1024)
    parser.add_argument('--port', type=int, help="port for postgresql protocol", default=5432)
    parser.add_argument('--mysql_port', type=int, help="port for mysql protocol", default=3306)
    parser.add_argument('--defuser', type=str, help="the default user", default='klbase')
    parser.add_argument('--defbase', type=str, help="the default basedir", default='/home/klbase/kunlunbase')
    parser.add_argument('--output', type=str, help='the output file path', default='single.json')

    args = parser.parse_args()
    if not args.defbase.startswith('/'):
        raise ValueError('Error: the default basedir must be absolute path!')
    gen_config(args)

